Files
Reem-Notas/app/views/admin/romaneios/_tabela.html.erb
victor b3464e3acd Romaneio: lista de veículos visível, busca com contador e logo escolhível
Traz para a tela as funções do programa original (Romaneiro PDF), na linha de
design do projeto:
- Veículos deixam de ser um <select> e viram lista visível com a contagem de
  paradas de cada carro — que é a conferência feita antes de imprimir e ficava
  invisível mostrando um veículo por vez. Cada item é link (?veiculo=), então
  sobrevive ao 'voltar' e ao F5. No celular vira faixa horizontal.
- Na mesma coluna: motorista do veículo, 'PDF deste veículo' e 'PDF de TODOS'.
- Busca ganha 'Limpar busca' e contador vivo ('4 de 31 paradas'). A contagem
  saiu do cabeçalho da tabela: dois números para a mesma coisa, um atualizando e
  o outro não, é a divergência que a diretriz 1 proíbe.
- Logo do cabeçalho escolhível (Configuracao 'romaneio_logo', separado do
  empresa_logo — o romaneio é documento do cliente). PNG/JPG até 2MB, gravado em
  storage/logos/ e não em public/, com nome gerado pelo sistema.
2026-08-27 19:20:49 -03:00

63 lines
3.1 KiB
Plaintext

<%# Tabela editável do veículo selecionado.
SEM paginação de propósito: acima de 1366px a lista inteira é o certo — esconder
item em monitor grande atrapalha até o Ctrl+F do navegador, e conferir romaneio é
exatamente procurar uma NF na lista. A busca acima filtra sem esconder nada.
<input> por célula, e não contenteditable: colar do Excel num contenteditable
traz HTML junto. %>
<div class="bg-[#111] border border-white/5 rounded-2xl overflow-hidden">
<div class="px-4 py-3 border-b border-white/5 flex items-center justify-between">
<%# Sem repetir a contagem aqui: ela agora é VIVA no bloco de filtros (muda
conforme a busca esconde linhas). Dois números para a mesma coisa, um
atualizando e outro não, é a divergência que a diretriz 1 proíbe. %>
<h2 class="text-white font-semibold text-sm">Paradas de <%= @veiculo %></h2>
<span class="text-xs text-gray-500" data-romaneio-target="status">Alterações salvam sozinhas</span>
</div>
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead class="bg-[#1a1a1a] text-gray-400 text-xs uppercase tracking-wider">
<tr>
<th class="text-left px-2 py-2 w-10">#</th>
<th class="text-left px-2 py-2 w-28">Nota fiscal</th>
<th class="text-left px-2 py-2 w-56">Nome</th>
<th class="text-left px-2 py-2">Endereço</th>
<th class="text-center px-2 py-2 w-24">Aparelho</th>
<th class="text-left px-2 py-2 w-44">Telefones</th>
</tr>
</thead>
<tbody class="divide-y divide-white/5">
<% linhas.each_with_index do |linha, i| %>
<tr data-romaneio-target="linha"
data-busca="<%= [linha.nota_fiscal, linha.nome, linha.endereco].join(' ').downcase %>">
<td class="px-2 py-1 text-gray-500 text-xs"><%= i + 1 %></td>
<% %w[nota_fiscal nome endereco].each do |campo| %>
<td class="px-1 py-1">
<%= render 'celula', linha: linha, campo: campo %>
</td>
<% end %>
<%# APARELHO só assume 'SIM' ou vazio: um botão de dois estados é alvo de
toque de verdade e não deixa digitar um terceiro valor. %>
<td class="px-1 py-1 text-center">
<button type="button"
data-action="romaneio#alternarAparelho"
data-linha-id="<%= linha.id %>"
data-valor="<%= linha.aparelho %>"
class="<%= linha.aparelho == 'SIM' ? 'bg-green-600/20 text-green-300 border-green-600/40' : 'bg-[#1a1a1a] text-gray-500 border-white/10' %>
w-full min-h-[40px] rounded-lg border font-semibold text-xs hover:border-orange-500 transition-colors">
<%= linha.aparelho.presence || '—' %>
</button>
<%= render 'marcador', linha: linha, campo: 'aparelho' %>
</td>
<td class="px-1 py-1">
<%= render 'celula', linha: linha, campo: 'telefones' %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>