Adição do botão de entrega manual
This commit is contained in:
@@ -81,6 +81,89 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Apontamento 100% manual — entrega que NÃO está na base de rastreio
|
||||
(ex.: motorista foi ao local mas a NF ficou com outro no rastreio). %>
|
||||
<% unless @consolidacao.finalizada? && current_user.operador? %>
|
||||
<div data-controller="apontamento-manual"
|
||||
data-apontamento-manual-apontar-manual-url-value="<%= apontar_manual_consolidacao_consolidacao_entregas_path(@consolidacao) %>"
|
||||
class="mb-4">
|
||||
<button type="button" data-action="apontamento-manual#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-purple-500/60 hover:border-purple-500 font-semibold px-4 py-3 rounded-lg min-h-[48px]">
|
||||
➕ Apontamento 100% manual
|
||||
<span class="text-gray-500 text-xs font-normal hidden md:inline">(entrega fora da base de rastreio)</span>
|
||||
</button>
|
||||
|
||||
<%# Modal %>
|
||||
<div data-apontamento-manual-target="modal" data-action="click->apontamento-manual#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">
|
||||
<div class="flex items-center justify-between mb-1">
|
||||
<h2 class="text-xl font-bold text-white">Apontamento 100% manual</h2>
|
||||
<button type="button" data-action="apontamento-manual#fechar"
|
||||
class="text-gray-500 hover:text-white text-2xl leading-none">✕</button>
|
||||
</div>
|
||||
<p class="text-gray-400 text-sm mb-4">Lançe uma entrega à mão, sem buscar na base de rastreio. Use quando o motorista foi ao local mas a nota ficou registrada com outro motorista.</p>
|
||||
|
||||
<p data-apontamento-manual-target="erro" class="hidden bg-red-500/10 text-red-400 border border-red-500/30 rounded-lg px-3 py-2 text-sm mb-3"></p>
|
||||
|
||||
<%# Motorista (default = o motorista da tela; pode trocar) %>
|
||||
<label class="block text-gray-400 text-sm mb-1">Motorista</label>
|
||||
<input data-apontamento-manual-target="motorista" type="text" list="motoristas-consolidacao"
|
||||
value="<%= @motorista %>" placeholder="Nome do motorista"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-purple-500 focus:outline-none mb-3">
|
||||
<datalist id="motoristas-consolidacao">
|
||||
<% Array(@motoristas_consolidacao).each do |nome| %>
|
||||
<option value="<%= nome %>"></option>
|
||||
<% end %>
|
||||
</datalist>
|
||||
|
||||
<%# NF + observação (texto livre) %>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 mb-3">
|
||||
<div>
|
||||
<label class="block text-gray-400 text-sm mb-1">NF <span class="text-gray-600">(opcional)</span></label>
|
||||
<input data-apontamento-manual-target="nf" type="text" inputmode="numeric" placeholder="Número da nota"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-purple-500 focus:outline-none">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-gray-400 text-sm mb-1">Observação / local <span class="text-gray-600">(opcional)</span></label>
|
||||
<input data-apontamento-manual-target="obs" type="text" placeholder="Ex.: UBS Sacomã"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-purple-500 focus:outline-none">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Pilares (múltiplos) %>
|
||||
<label class="block text-gray-400 text-sm mb-2">Classificar como <span class="text-gray-600">(pode marcar mais de uma)</span></label>
|
||||
<div class="grid grid-cols-2 gap-2 mb-3">
|
||||
<% [['entrega_normal', '🚚 Entrega Normal', Configuracao.preco_entrega],
|
||||
['retirada', '📦 Retirada', Configuracao.preco_retirada],
|
||||
['bonus', '⭐ Bônus', Configuracao.preco_bonus],
|
||||
['desconto', '⚠️ Desconto', Configuracao.preco_desconto],
|
||||
['extraordinaria', '✨ Entrega Extraordinária', Configuracao.preco_extraordinaria]].each do |tipo, label, preco| %>
|
||||
<label class="flex items-center gap-2 bg-[#0a0a0a] border border-[#2a2a2a] rounded-lg px-3 py-3 cursor-pointer hover:border-purple-500 text-sm text-white">
|
||||
<input type="checkbox" value="<%= tipo %>" data-apontamento-manual-target="tipoCheck"
|
||||
<%= 'checked' if tipo == 'entrega_normal' %>
|
||||
class="accent-purple-500">
|
||||
<span><%= label %><br><span class="text-gray-500 text-xs"><%= moeda(preco) %></span></span>
|
||||
</label>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%# Valor customizado da Extraordinária (opcional) %>
|
||||
<div class="mb-4">
|
||||
<label class="block text-gray-400 text-sm mb-1">Valor da Extraordinária <span class="text-gray-600">(opcional — vazio usa o padrão)</span></label>
|
||||
<input data-apontamento-manual-target="valorExtra" type="text" inputmode="decimal" placeholder="<%= moeda(Configuracao.preco_extraordinaria) %>"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-purple-500 focus:outline-none">
|
||||
</div>
|
||||
|
||||
<button type="button" data-action="apontamento-manual#adicionar"
|
||||
class="w-full bg-green-600 hover:bg-green-500 text-white font-bold py-3.5 rounded-lg min-h-[48px]">
|
||||
Adicionar apontamento ✓
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-4 gap-4">
|
||||
|
||||
<%# ── Lista de entregas (3 colunas) ─────────────────── %>
|
||||
|
||||
Reference in New Issue
Block a user