Grande correção do filtro de veiculos na area de consolidação
This commit is contained in:
@@ -46,13 +46,15 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Fechar por veículo — filtra a tela por carro e mostra quais já estão fechados.
|
||||
<%# 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 %>
|
||||
<div class="bg-[#1a1a1a] border border-[#2a2a2a] rounded-xl p-3 mb-3">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<div class="flex items-center gap-2 mb-2 flex-wrap">
|
||||
<span class="text-gray-400 text-sm font-semibold">🚗 Fechar por veículo:</span>
|
||||
<span class="text-gray-600 text-xs">clique para filtrar/somar um ou vários carros (clique de novo p/ tirar)</span>
|
||||
<span class="text-gray-600 text-xs">clique no nome para filtrar; consolide o carro quando estiver 100% (🔒)</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<%# Chip "Todos" — limpa a seleção (mostra todos os carros) %>
|
||||
@@ -66,18 +68,68 @@
|
||||
<% 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
|
||||
#{selecionado ? 'border-orange-500 text-orange-400 bg-orange-500/10' : (v[:fechado] ? 'border-green-500 text-green-400 bg-green-500/10' : 'border-[#2a2a2a] text-gray-300 hover:border-orange-500')}" do %>
|
||||
class: "px-3 py-2 rounded-lg text-sm font-semibold border min-h-[40px] flex items-center gap-2 transition-colors #{cor}" do %>
|
||||
<span data-chip-lock class="<%= 'hidden' unless v[:fechado] %>">🔒</span>
|
||||
<span><%= v[:vehicle] %></span>
|
||||
<span class="text-xs <%= v[:fechado] ? 'text-green-400' : 'text-gray-500' %>">
|
||||
<span class="text-xs <%= v[:completo] ? 'text-green-400' : 'text-gray-500' %>">
|
||||
<span data-chip-feito><%= v[:classificadas] %></span>/<span data-chip-total><%= v[:eligible] %></span>
|
||||
<span data-chip-check><%= '✓' if v[:fechado] %></span>
|
||||
<span data-chip-check><%= '✓' if v[:completo] %></span>
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%# 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 } %>
|
||||
<div class="mt-3 pt-3 border-t border-[#2a2a2a]">
|
||||
<% if status_unico.nil? %>
|
||||
<p class="text-gray-500 text-xs">Selecione <strong>um</strong> veículo (clique no nome) para consolidá-lo separadamente.</p>
|
||||
<% elsif status_unico[:fechado] %>
|
||||
<div class="flex items-center gap-2 flex-wrap">
|
||||
<span class="text-green-400 text-sm font-semibold">🔒 <%= sel_unico %> consolidado.</span>
|
||||
<%= 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]' %>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="flex items-center gap-2 flex-wrap">
|
||||
<%# 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]' %>
|
||||
<span class="text-gray-500 text-xs" data-validacao-target="consolidarHint">
|
||||
<%= status_unico[:completo] ? 'Pronto para consolidar.' : 'Classifique 100% deste veículo para consolidar.' %>
|
||||
</span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -172,6 +224,16 @@
|
||||
<% end %>
|
||||
</datalist>
|
||||
|
||||
<%# Veículo (Q3) — a qual carro este lançamento pertence (soma no balde dele) %>
|
||||
<label class="block text-gray-400 text-sm mb-1">Veículo <span class="text-gray-600">(opcional)</span></label>
|
||||
<select data-apontamento-manual-target="veiculo"
|
||||
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">
|
||||
<option value="">— sem veículo —</option>
|
||||
<% @veiculos_status.map { |v| v[:vehicle] }.reject { |x| x == '(sem veículo)' }.each do |veic| %>
|
||||
<option value="<%= veic %>"><%= veic %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
|
||||
<%# NF + observação (texto livre) %>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 mb-3">
|
||||
<div>
|
||||
@@ -242,6 +304,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%# Veículo (Q3) — a qual carro estes termos pertencem %>
|
||||
<label class="block text-gray-400 text-sm mb-1">Veículo <span class="text-gray-600">(opcional)</span></label>
|
||||
<select data-apontamento-termo-target="veiculo"
|
||||
class="w-full bg-[#0a0a0a] border border-[#2a2a2a] text-white rounded-lg px-3 py-3 text-base focus:border-blue-500 focus:outline-none mb-4">
|
||||
<option value="">— sem veículo —</option>
|
||||
<% @veiculos_status.map { |v| v[:vehicle] }.reject { |x| x == '(sem veículo)' }.each do |veic| %>
|
||||
<option value="<%= veic %>"><%= veic %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
|
||||
<%# Stepper de quantidade %>
|
||||
<label class="block text-gray-400 text-sm mb-2">Quantidade de termos</label>
|
||||
<div class="flex items-center justify-center gap-3 mb-5">
|
||||
|
||||
Reference in New Issue
Block a user