89 lines
4.5 KiB
Plaintext
89 lines
4.5 KiB
Plaintext
<%# app/views/admin/romaneios/show.html.erb
|
|
Editor do romaneio: veículos à esquerda, tabela editável à direita, e o PDF
|
|
REAL num pop-up com navegação entre as folhas (partial `_previa`, que explica
|
|
por que a prévia aberta é estado na URL e não estado de JavaScript). %>
|
|
<div class="space-y-5"
|
|
data-controller="romaneio"
|
|
data-romaneio-url-value="<%= admin_romaneio_path(@romaneio) %>"
|
|
data-romaneio-pdf-url-value="<%= pdf_admin_romaneio_path(@romaneio) %>"
|
|
data-romaneio-veiculo-value="<%= @veiculo %>">
|
|
|
|
<div class="flex flex-col sm:flex-row sm:flex-wrap sm:items-start sm:justify-between gap-3">
|
|
<div>
|
|
<h1 class="text-2xl font-bold text-white">
|
|
Romaneio de <%= l @romaneio.planned_date, format: '%d/%m/%Y' %>
|
|
</h1>
|
|
<p class="text-gray-400 text-sm mt-0.5">
|
|
<%= @romaneio.operacao_label || 'Sem operação vinculada' %> ·
|
|
<%= @romaneio.contagem_por_veiculo.values.sum %> paradas em
|
|
<%= @veiculos.size %> veículo(s) ·
|
|
importado de <%= @romaneio.origem %>
|
|
<%= "em #{l @romaneio.importado_em, format: '%d/%m %H:%M'}" if @romaneio.importado_em %>
|
|
</p>
|
|
</div>
|
|
<%# NOVOS x RECORRENTES: o mesmo aviso que o programa antigo dava numa caixa
|
|
de diálogo depois de aplicar o status. Fica ao lado do título porque é a
|
|
primeira coisa a conferir — "0 novos" quase sempre significa importação
|
|
sem operação vinculada, e o aviso azul abaixo explica o que fazer. %>
|
|
<% contagem = @romaneio.contagem_aparelho %>
|
|
<div class="flex items-center gap-2 text-sm">
|
|
<span class="px-3 py-1.5 rounded-xl border
|
|
<%= contagem[:novos].positive? ? 'bg-green-600/15 border-green-500/40 text-green-300'
|
|
: 'bg-amber-900/20 border-amber-500/40 text-amber-200' %>">
|
|
<strong><%= contagem[:novos] %></strong> com aparelho (NOVOS)
|
|
</span>
|
|
<span class="px-3 py-1.5 rounded-xl bg-white/5 border border-white/10 text-gray-300">
|
|
<strong><%= contagem[:recorrentes] %></strong> recorrentes
|
|
</span>
|
|
</div>
|
|
|
|
<div class="flex flex-wrap gap-2">
|
|
<%= link_to rotulo(:baixar, 'Baixar todos'),
|
|
pdf_admin_romaneio_path(@romaneio),
|
|
class: 'px-4 py-2.5 bg-[#f97316] hover:bg-orange-500 text-white font-semibold rounded-xl min-h-[44px] inline-flex items-center' %>
|
|
<%# Em BLOCO: button_to sem bloco gera <input type="submit">, que não aceita
|
|
o SVG do ícone (ver ApplicationHelper#rotulo). %>
|
|
<%= button_to reimportar_admin_romaneio_path(@romaneio, veiculo: @veiculo), method: :post,
|
|
form: { data: { turbo_confirm: 'Rebuscar o plano? Os campos que você editou são preservados.' } },
|
|
class: 'px-4 py-2.5 bg-[#1a1a1a] hover:bg-[#242424] text-white border border-white/10 rounded-xl min-h-[44px]' do %>
|
|
<%= icone :restaurar, cor: nil %> Reimportar plano
|
|
<% end %>
|
|
<%= link_to 'Voltar', admin_romaneios_path,
|
|
class: 'px-4 py-2.5 text-gray-400 hover:text-white min-h-[44px] inline-flex items-center' %>
|
|
</div>
|
|
</div>
|
|
|
|
<%= render 'shared/flash' %>
|
|
|
|
<% if @veiculos.empty? %>
|
|
<div class="bg-[#111] border border-white/5 rounded-2xl p-8 text-center">
|
|
<p class="text-gray-400">Este romaneio está sem paradas.</p>
|
|
<p class="text-gray-500 text-sm mt-1">Clique em “Reimportar plano” ou envie a planilha do plano na tela anterior.</p>
|
|
</div>
|
|
<% else %>
|
|
<%= render 'operacao' %>
|
|
<%= render 'avisos' %>
|
|
|
|
<%# Duas zonas na tela: VEÍCULOS e a edição. A prévia é o pop-up mais abaixo —
|
|
o PDF só é gerado quando alguém o abre (antes o <iframe> era montado em
|
|
TODO carregamento, gerando um PDF no servidor para ficar num canto que o
|
|
operador nem sempre olha). %>
|
|
<div class="grid grid-cols-1 lg:grid-cols-[minmax(0,260px)_minmax(0,1fr)] gap-5 items-start">
|
|
<div class="lg:sticky lg:top-4">
|
|
<%= render 'veiculos' %>
|
|
</div>
|
|
|
|
<div class="space-y-4">
|
|
<%= render 'controles' %>
|
|
<%= render 'tabela', linhas: @linhas %>
|
|
<%= render 'removidas', linhas: @removidas %>
|
|
</div>
|
|
</div>
|
|
|
|
<%# Pop-up da prévia: FORA da grade porque cobre a tela inteira. Só existe no
|
|
HTML quando ?previa=1 — fechado, nem o iframe é criado, então o servidor
|
|
não monta um PDF que ninguém pediu (ver `_previa`). %>
|
|
<%= render 'previa' if @previa %>
|
|
<% end %>
|
|
</div>
|