Melhorias gerais descritas no READ.me
This commit is contained in:
@@ -31,11 +31,15 @@
|
||||
<% if @veiculo.present? %>🚚 <%= @veiculo %> — <% end %>
|
||||
<span data-validacao-target="contadorClassificadas"><%= @classificadas %></span>
|
||||
de <span data-validacao-target="contadorTotal"><%= @total_entregas %></span> entregas classificadas
|
||||
<span data-validacao-target="manuaisInfo" class="<%= 'hidden' unless @manuais.positive? %> text-blue-400 font-normal">·
|
||||
+<span data-validacao-target="contadorManuais"><%= @manuais %></span> manuais</span>
|
||||
</span>
|
||||
<span class="text-orange-500 font-bold" data-validacao-target="percentual"></span>
|
||||
</div>
|
||||
<div class="w-full bg-[#0a0a0a] rounded-full h-3">
|
||||
<div data-validacao-target="barra" class="h-3 rounded-full bg-orange-500 transition-all duration-300" style="width: 0%"></div>
|
||||
<%# Barra com 2 segmentos: laranja/verde = elegíveis classificadas · azul = lançamentos manuais %>
|
||||
<div class="w-full bg-[#0a0a0a] rounded-full h-3 flex overflow-hidden">
|
||||
<div data-validacao-target="barra" class="h-3 bg-orange-500 transition-all duration-300" style="width: 0%"></div>
|
||||
<div data-validacao-target="barraManuais" class="h-3 bg-blue-500 transition-all duration-300" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -347,6 +351,15 @@
|
||||
<span class="flex items-center gap-2"><span class="w-3 h-3 bg-purple-600 rounded-full"></span> Extraordinária</span>
|
||||
<span class="text-white font-bold" data-validacao-target="qtdExtraordinaria">0</span>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="flex items-center gap-2"><span class="w-3 h-3 bg-blue-600 rounded-full"></span> Termo</span>
|
||||
<span class="text-white font-bold" data-validacao-target="qtdTermo">0</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-t border-[#2a2a2a] pt-4 flex justify-between items-center text-sm">
|
||||
<span class="flex items-center gap-2 text-blue-400"><span class="w-3 h-3 bg-blue-500 rounded-full"></span> Apontamentos manuais</span>
|
||||
<span class="text-blue-400 font-bold" data-validacao-target="qtdManuais"><%= @manuais %></span>
|
||||
</div>
|
||||
|
||||
<div class="border-t border-[#2a2a2a] pt-4">
|
||||
@@ -360,6 +373,7 @@
|
||||
<p>⭐ Bônus: <%= moeda(@precos[:bonus]) %></p>
|
||||
<p>⚠️ Desconto: -<%= moeda(@precos[:desconto]) %></p>
|
||||
<p>✨ Extraordinária: <%= moeda(@precos[:extraordinaria]) %> (valor por entrega)</p>
|
||||
<p>📄 Termo: <%= moeda(@precos[:termo]) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -371,6 +385,7 @@
|
||||
<% _todas = @classificacoes.values.flatten %>
|
||||
<%= raw({
|
||||
classificadas: @classificadas,
|
||||
manuais: @manuais,
|
||||
por_tipo: _todas.group_by(&:tipo).transform_values(&:size),
|
||||
valor_total: _todas.sum { |c| c.tipo == 'desconto' ? -c.valor_aplicado : c.valor_aplicado }.to_f
|
||||
}.to_json) %>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<%# Header do wizard %>
|
||||
<div class="mb-6">
|
||||
<%= link_to '← Voltar para consolidações', consolidacoes_path, class: 'text-gray-500 hover:text-orange-500 text-sm' %>
|
||||
<%= link_to '← Voltar para o resumo', consolidacao_path(@consolidacao), class: 'text-gray-500 hover:text-orange-500 text-sm' %>
|
||||
<h1 class="text-2xl font-bold text-white mt-2"><%= @consolidacao.nome %></h1>
|
||||
<p class="text-gray-400 text-sm">
|
||||
📅 <%= l @consolidacao.data_inicio, format: :short %> → <%= l @consolidacao.data_fim, format: :short %>
|
||||
@@ -31,19 +31,36 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Apontamento manual — adiciona entrega por fora (busca pela NF na rastreio) %>
|
||||
<%# Caixa de ferramentas do Passo 1 — concentra "Apontamento manual" (busca pela
|
||||
NF) e "Adicionar motorista" num único botão com menu suspenso. %>
|
||||
<% unless @consolidacao.finalizada? && current_user.operador? %>
|
||||
<div data-controller="apontamento"
|
||||
<div class="relative mb-4"
|
||||
data-controller="ferramentas apontamento adicionar-motorista"
|
||||
data-apontamento-buscar-url-value="<%= buscar_nf_consolidacao_consolidacao_entregas_path(@consolidacao) %>"
|
||||
data-apontamento-apontar-url-value="<%= apontar_consolidacao_consolidacao_entregas_path(@consolidacao) %>"
|
||||
class="mb-4">
|
||||
<button type="button" data-action="apontamento#abrir"
|
||||
class="w-full md:w-auto inline-flex items-center justify-center gap-2 bg-[#1a1a1a] hover:bg-[#2a2a2a] text-white border border-dashed border-orange-500/60 hover:border-orange-500 font-semibold px-4 py-3 rounded-lg min-h-[48px]">
|
||||
➕ Apontamento manual
|
||||
<span class="text-gray-500 text-xs font-normal hidden md:inline">(nota que chegou por fora)</span>
|
||||
data-apontamento-apontar-url-value="<%= apontar_consolidacao_consolidacao_entregas_path(@consolidacao) %>">
|
||||
|
||||
<%# Botão único + menu suspenso %>
|
||||
<button type="button" data-action="ferramentas#toggle"
|
||||
class="w-full md:w-auto inline-flex items-center justify-center gap-2 bg-[#1a1a1a] hover:bg-[#2a2a2a] text-white border border-dashed border-[#3a3a3a] hover:border-orange-500 font-semibold px-4 py-3 rounded-lg min-h-[48px]">
|
||||
➕ Adicionar / Ferramentas
|
||||
<span class="text-gray-500">▾</span>
|
||||
</button>
|
||||
|
||||
<%# Modal %>
|
||||
<div data-ferramentas-target="menu"
|
||||
class="hidden absolute z-40 mt-2 w-72 bg-[#1a1a1a] border border-[#2a2a2a] rounded-xl shadow-xl overflow-hidden">
|
||||
<button type="button" data-action="apontamento#abrir ferramentas#fechar"
|
||||
class="w-full text-left px-4 py-3 hover:bg-[#2a2a2a] border-l-2 border-transparent hover:border-orange-500">
|
||||
<span class="block text-white font-semibold">📝 Apontamento manual</span>
|
||||
<span class="block text-gray-500 text-xs">nota que chegou por fora (busca pela NF)</span>
|
||||
</button>
|
||||
<button type="button" data-action="adicionar-motorista#abrir ferramentas#fechar"
|
||||
class="w-full text-left px-4 py-3 hover:bg-[#2a2a2a] border-t border-[#2a2a2a] border-l-2 border-l-transparent hover:border-l-green-500">
|
||||
<span class="block text-white font-semibold">🧑✈️ Adicionar motorista</span>
|
||||
<span class="block text-gray-500 text-xs">incluir/restaurar um motorista nesta consolidação</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<%# Modal — apontamento manual (busca NF) %>
|
||||
<div data-apontamento-target="modal" data-action="click->apontamento#fundo"
|
||||
class="hidden fixed inset-0 z-50 bg-black/70 flex items-center justify-center p-4">
|
||||
<div class="bg-[#1a1a1a] border border-[#2a2a2a] rounded-2xl w-full max-w-lg p-6 max-h-[90vh] overflow-y-auto">
|
||||
@@ -92,6 +109,35 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Modal — adicionar motorista %>
|
||||
<div data-adicionar-motorista-target="modal" data-action="click->adicionar-motorista#fundo"
|
||||
class="hidden fixed inset-0 z-50 bg-black/70 flex items-center justify-center p-4">
|
||||
<div class="bg-[#1a1a1a] border border-[#2a2a2a] rounded-2xl w-full max-w-md p-6">
|
||||
<div class="flex items-center justify-between mb-1">
|
||||
<h2 class="text-xl font-bold text-white">🧑✈️ Adicionar motorista</h2>
|
||||
<button type="button" data-action="adicionar-motorista#fechar"
|
||||
class="text-gray-500 hover:text-white text-2xl leading-none">✕</button>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm mb-4">Inclua um motorista nesta consolidação. Se ele estava arquivado, será restaurado.</p>
|
||||
|
||||
<%= form_with url: adicionar_motorista_consolidacao_path(@consolidacao), method: :post do |f| %>
|
||||
<label class="block text-gray-400 text-sm mb-1">Motorista</label>
|
||||
<input data-adicionar-motorista-target="input" type="text" name="motorista_nome"
|
||||
list="motoristas-disponiveis" placeholder="Nome do motorista" autocomplete="off"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-orange-500 focus:outline-none mb-4">
|
||||
<datalist id="motoristas-disponiveis">
|
||||
<% Array(@motoristas_disponiveis).each do |nome| %>
|
||||
<option value="<%= nome %>"></option>
|
||||
<% end %>
|
||||
</datalist>
|
||||
<button type="submit"
|
||||
class="w-full bg-green-600 hover:bg-green-500 text-white font-bold py-3.5 rounded-lg min-h-[48px]">
|
||||
Adicionar ✓
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -162,12 +208,21 @@
|
||||
<p class="text-gray-300 font-semibold"><%= cm.motorista_nome %></p>
|
||||
<p class="text-gray-600 text-xs">Arquivado · não conta no total</p>
|
||||
</div>
|
||||
<% if pode_arquivar_motorista %>
|
||||
<%= button_to '♻️ Restaurar',
|
||||
desarquivar_motorista_consolidacao_path(@consolidacao, consolidacao_motorista_id: cm.id),
|
||||
method: :post,
|
||||
class: 'text-green-400 hover:text-green-300 border border-[#2a2a2a] hover:border-green-500/50 px-3 py-2 rounded-lg text-xs min-h-[40px]' %>
|
||||
<% end %>
|
||||
<div class="flex items-center gap-2">
|
||||
<% if pode_arquivar_motorista %>
|
||||
<%= button_to '♻️ Restaurar',
|
||||
desarquivar_motorista_consolidacao_path(@consolidacao, consolidacao_motorista_id: cm.id),
|
||||
method: :post,
|
||||
class: 'text-green-400 hover:text-green-300 border border-[#2a2a2a] hover:border-green-500/50 px-3 py-2 rounded-lg text-xs min-h-[40px]' %>
|
||||
<% end %>
|
||||
<% if policy(@consolidacao).destroy? %>
|
||||
<%= button_to '🗑️ Excluir',
|
||||
excluir_motorista_consolidacao_path(@consolidacao, consolidacao_motorista_id: cm.id),
|
||||
method: :delete,
|
||||
form: { data: { turbo_confirm: "Excluir DEFINITIVAMENTE #{cm.motorista_nome} desta consolidação? Os lançamentos dele serão apagados e isso não pode ser desfeito." } },
|
||||
class: 'text-red-400 hover:text-red-300 border border-[#2a2a2a] hover:border-red-500/50 px-3 py-2 rounded-lg text-xs min-h-[40px]' %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user