<%# app/views/operacoes_dashboard/index.html.erb %> <%# Dashboard de análise de entregas por operação (KPIs, insucessos, STS, mapa). %> <% content_for :head do %> <%# Flatpickr (date range) — CSS no %> <%# Leaflet (mapa de calor) %> <% end %> <% hoje = Date.current %> <% atalhos = { 'Hoje' => [hoje, hoje], '7 dias' => [hoje - 6, hoje], 'Este mês' => [hoje.beginning_of_month, hoje], '30 dias' => [hoje - 29, hoje] } %> <% ini_iso = @periodo_inicio.strftime('%Y-%m-%d') %> <% fim_iso = @periodo_fim.strftime('%Y-%m-%d') %> <%# Parâmetros de operação a preservar ao trocar de modo/período %> <% ctx_ops = { operacao: @operacao, op_a: @op_a, op_b: @op_b }.compact %>
<%# ── Cabeçalho ─────────────────────────────────────────── %>

Dashboard de Operações

<% if @modo == 'global' %> 🌐 Global · <%= @periodo_inicio.strftime('%d/%m/%Y') %> – <%= @periodo_fim.strftime('%d/%m/%Y') %> <% elsif @modo == 'comparar' %> ⚖️ Comparação entre operações (cada uma no seu próprio período) <% elsif @metricas&.data_inicio %> <%= @metricas.operacoes_label %> · <%= @metricas.data_inicio.strftime('%d/%m/%Y') %> – <%= @metricas.data_fim.strftime('%d/%m/%Y') %> <% elsif @operacao %> <%= Operacao.label(@operacao) %> <% end %> · Atualizado às <%= Time.now.strftime('%H:%M') %>

<%# Filtro de período — só na visão Global (a faixa de data não se aplica a operação única, que usa o período natural dos próprios dados). %> <% if @modo == 'global' %>
📅
<% atalhos.each do |label, (ini, fim)| %> <% ativo = @periodo_inicio == ini && @periodo_fim == fim %> <%= link_to label, operacoes_dashboard_path(modo: 'global', inicio: ini.strftime('%Y-%m-%d'), fim: fim.strftime('%Y-%m-%d')), data: { turbo: false }, class: "px-3 py-2.5 rounded-xl text-sm whitespace-nowrap border #{ativo ? 'bg-orange-500 text-black border-orange-500 font-bold' : 'bg-[#1a1a1a] text-gray-300 border-white/10 hover:border-orange-500'}" %> <% end %>
<% end %>
<%# ── Abas de modo ──────────────────────────────────────── %> <% modos = { 'operacao' => '🏥 Operação', 'global' => '🌐 Global', 'comparar' => '⚖️ Comparar' } %>
<% modos.each do |m, label| %> <% ativo = @modo == m %> <%= link_to label, operacoes_dashboard_path(ctx_ops.merge(modo: m, inicio: ini_iso, fim: fim_iso)), data: { turbo: false }, class: "px-4 py-2 rounded-xl text-sm font-semibold whitespace-nowrap #{ativo ? 'bg-orange-500 text-black' : 'bg-[#1a1a1a] text-gray-300 border border-white/10 hover:border-orange-500'}" %> <% end %>
<% if @tabelas_validas.blank? %>
Nenhuma operação encontrada no banco (tabelas gade_entregas_*).
<% else %> <%# ── Seletor de operação por modo ───────────────────── %> <% if @modo == 'operacao' %>
<% if @metricas %> <%= render 'painel', metricas: @metricas %> <%= render 'mapa', metricas: @metricas %> <% end %> <% elsif @modo == 'global' %>
🌐 Visão Global — todas as <%= @tabelas_validas.size %> operações agregadas no período.
<% if @metricas %> <%= render 'painel', metricas: @metricas %> <%= render 'mapa', metricas: @metricas %> <% end %> <% else # comparar %>
<% if @metricas_a %> <%= render 'painel', metricas: @metricas_a, titulo: "A · #{@metricas_a.operacoes_label}" %> <% else %>

Selecione a operação A.

<% end %>
<% if @metricas_b %> <%= render 'painel', metricas: @metricas_b, titulo: "B · #{@metricas_b.operacoes_label}" %> <% else %>

Selecione a operação B.

<% end %>
<% end %> <% end %>
<%# ── Scripts: flatpickr, Chart.js, Leaflet ───────────────── %>