<%# app/views/consolidacao_entregas/validar.html.erb — PASSO 2: Validar entregas %> <% content_for :title, "Validar — #{@motorista}" %>
<%# Cabeçalho + controles fixos no topo (no desktop); só a lista de NFs rola. %>
<%# Header %>
<%= link_to '← Voltar (Passo 1)', wizard_consolidacao_path(@consolidacao), class: 'inline-flex items-center gap-1 bg-[#1a1a1a] hover:bg-[#2a2a2a] text-white border border-[#2a2a2a] hover:border-orange-500 font-semibold px-4 py-2.5 rounded-lg text-sm min-h-[44px]' %>

🚚 <%= @motorista %>

<%= @consolidacao.nome %> · <%= l @consolidacao.data_inicio, format: :short %> → <%= l @consolidacao.data_fim, format: :short %>

<%= link_to 'Revisar (Passo 3) →', revisar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: @motorista), class: 'bg-orange-500 hover:bg-orange-600 text-black font-bold px-5 py-3 rounded-lg min-h-[48px] flex items-center' %>
<%# Barra de progresso (reflete o veículo selecionado, se houver) %>
<% if @veiculos_sel.any? %>🚚 <%= @veiculos_sel.join(', ') %> — <% end %> <%= @classificadas %> de <%= @total_entregas %> entregas classificadas · +<%= @manuais %> manuais
<%# Barra com 2 segmentos: laranja/verde = elegíveis classificadas · azul = lançamentos manuais %>
<%# Fechar por veículo — filtra a tela por carro, mostra o estado (pronto/ consolidado/arquivado) e permite CONSOLIDAR o veículo selecionado. Só aparece quando o motorista usou mais de um veículo no período. %> <% pode_fechar_veiculo = !(@consolidacao.finalizada? && current_user.operador?) %> <% if @veiculos_status.size > 1 %>
🚗 Fechar por veículo: clique no nome para filtrar; consolide o carro quando estiver 100% (🔒)
<%# Chip "Todos" — limpa a seleção (mostra todos os carros) %> <%= link_to validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: @motorista), class: "px-3 py-2 rounded-lg text-sm font-semibold border min-h-[40px] flex items-center #{@veiculos_sel.empty? ? 'border-orange-500 text-orange-400 bg-orange-500/10' : 'border-[#2a2a2a] text-gray-300 hover:border-orange-500'}" do %> Todos <% end %> <% @veiculos_status.each do |v| %> <% selecionado = @veiculos_sel.include?(v[:vehicle]) %> <%# Alterna este veículo dentro da seleção atual (multi-seleção) %> <% nova_sel = selecionado ? (@veiculos_sel - [v[:vehicle]]) : (@veiculos_sel + [v[:vehicle]]) %> <%# Cor determinística: selecionado(laranja) > consolidado(verde+🔒) > pronto(verde) > arquivado(cinza tracejado) > neutro. %> <% cor = if selecionado then 'border-orange-500 text-orange-400 bg-orange-500/10' elsif v[:fechado] then 'border-green-500 text-green-400 bg-green-500/10' elsif v[:completo] then 'border-green-600/50 text-green-400' elsif v[:arquivado] then 'border-dashed border-[#3a3a3a] text-gray-500' else 'border-[#2a2a2a] text-gray-300 hover:border-orange-500' end %> <%= link_to validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: @motorista, vehicle: nova_sel.presence), data: { 'validacao-target': 'chipVeiculo', vehicle: v[:vehicle], eligible: v[:eligible] }, class: "px-3 py-2 rounded-lg text-sm font-semibold border min-h-[40px] flex items-center gap-2 transition-colors #{cor}" do %> 🔒 <%= v[:vehicle] %> <%= v[:classificadas] %>/<%= v[:eligible] %> <%= '✓' if v[:completo] %> <% end %> <% end %>
<%# Ação de consolidação — opera sobre o veículo único selecionado. %> <% if pode_fechar_veiculo %> <% sel_unico = @veiculos_sel.size == 1 ? @veiculos_sel.first : nil %> <% status_unico = sel_unico && @veiculos_status.find { |v| v[:vehicle] == sel_unico } %>
<% if status_unico.nil? %>

Selecione um veículo (clique no nome) para consolidá-lo separadamente.

<% elsif status_unico[:fechado] %>
🔒 <%= sel_unico %> consolidado. <%= button_to '🔓 Reabrir veículo', reabrir_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), method: :post, params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, data: { turbo_confirm: "Reabrir o veículo #{sel_unico} para edição?" }, class: 'text-gray-400 hover:text-white border border-[#2a2a2a] hover:border-orange-500 px-3 py-2 rounded-lg text-xs min-h-[40px]' %>
<% else %>
<%# Habilita só quando o carro está 100% classificado; o JS liga/desliga conforme a barra do escopo selecionado chega (ou não) a 100%. %> <%= button_to '🔒 Consolidar este veículo', fechar_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), method: :post, params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, disabled: !status_unico[:completo], data: { 'validacao-target': 'consolidarBtn', turbo_confirm: "Consolidar o veículo #{sel_unico}? Você poderá reabrir depois." }, class: "font-bold px-4 py-2 rounded-lg text-xs min-h-[40px] #{status_unico[:completo] ? 'bg-green-600 hover:bg-green-500 text-white cursor-pointer' : 'bg-[#2a2a2a] text-gray-600 cursor-not-allowed'}" %> <%= button_to '🗄️ Arquivar veículo', arquivar_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), method: :post, params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, data: { turbo_confirm: "Arquivar o veículo #{sel_unico}? Ele sai da finalização (as entregas já classificadas continuam no pagamento)." }, class: 'text-gray-400 hover:text-white border border-[#2a2a2a] hover:border-red-500/50 px-3 py-2 rounded-lg text-xs min-h-[40px]' %> <%= status_unico[:completo] ? 'Pronto para consolidar.' : 'Classifique 100% deste veículo para consolidar.' %>
<% end %>
<% end %>
<% end %> <%# Ações em massa + filtro %>
Aplicar nos selecionados (clique de novo p/ remover):
<%# Oculta/mostra o resumo lateral (mais largura para a lista) %> <%= link_to params[:apenas_pendentes] == '1' ? 'Mostrar todas' : 'Apenas não classificadas', validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: @motorista, vehicle: @veiculos_sel.presence, apenas_pendentes: params[:apenas_pendentes] == '1' ? nil : '1'), class: 'text-orange-400 hover:text-orange-300 text-sm border border-orange-500/40 px-3 py-2 rounded-lg' %>
<%# Caixa de ferramentas — concentra os lançamentos avulsos (registro manual de entrega e entrega de termo) num único botão com menu suspenso. Os modais e controllers existentes são reaproveitados; só o gatilho mudou. %> <% unless @consolidacao.finalizada? && current_user.operador? %>
<%# Botão único + menu suspenso %> <%# Modal — registro manual de entrega %> <%# Modal — entrega de termo %>
<% end %>
<%# Fim do cabeçalho fixo — abaixo só a lista de NFs rola. %>
<%# ── Lista de entregas (3 colunas) — área rolável ──── %>
<%# 🔍 Busca na listagem — filtra os cards por NF, local, endereço ou veículo %>
🔍
<% if @entregas.any? %> <% @entregas.each do |e| %> <% tipos_ativos = (@classificacoes[e.tracking_id] || []).map(&:tipo) %>
<%# Checkbox seleção em massa %> <%# Dados da entrega %>

NF <%= e.numero_nf %> · <%= e.local %> <% if e.falhada? %> ⚠️ Insucesso <% else %> ✓ Entregue <% end %>

📍 <%= e.address.presence || 'sem endereço' %>

📅 <%= e.checkout&.strftime('%d/%m/%Y') || '—' %> · 🚚 <%= e.vehicle.presence || 'sem veículo' %> <% if e.atraso_minutos > 0 %> · ⏱️ atraso <%= e.atraso_minutos %>min<% end %>

<%# Toggles coloridos — laranja=normal, laranja escuro=retirada, branco=bônus, preto=desconto %>
<% [ ['entrega_normal', 'Normal', 'bg-orange-500 text-black'], ['retirada', 'Retirada', 'bg-orange-800 text-white'], ['bonus', 'Bônus', 'bg-white text-black border border-orange-500'], ['desconto', 'Desc.', 'bg-black text-white border border-gray-700'], ['extraordinaria', 'Extra', 'bg-purple-600 text-white'] ].each do |tipo, label, cores| %> <% end %>
<% end %> <% else %>

🎉

Nenhuma entrega pendente neste filtro.

<% end %>
<%# ── Resumo lateral (1 coluna) — rola junto se precisar ─────── %>

📊 Resumo

Normal 0
Retirada 0
Bônus 0
Desconto 0
Extraordinária 0
Termo 0
Apontamentos manuais <%= @manuais %>

Total do motorista

R$ 0,00

💰 Normal: <%= moeda(@precos[:entrega_normal]) %>

📦 Retirada: <%= moeda(@precos[:retirada]) %>

⭐ Bônus: <%= moeda(@precos[:bonus]) %>

⚠️ Desconto: -<%= moeda(@precos[:desconto]) %>

✨ Extraordinária: <%= moeda(@precos[:extraordinaria]) %> (valor por entrega)

📄 Termo: <%= moeda(@precos[:termo]) %>

<%# Estado inicial para o Stimulus %>