Correção def adicionar_motorista authorize @consolidacao, :update?e na busca na adição dos motoristas
This commit is contained in:
@@ -6,6 +6,7 @@ class ConsolidacoesController < ApplicationController
|
||||
only: %i[show edit update destroy finalizar arquivar reativar wizard
|
||||
registrar_pagamento cancelar_pagamento
|
||||
arquivar_motorista desarquivar_motorista
|
||||
excluir_motorista adicionar_motorista
|
||||
preview_extrato gerar_pdf_relatorio gerar_pdf_extrato
|
||||
gerar_pdf_financeiro]
|
||||
|
||||
@@ -165,8 +166,10 @@ class ConsolidacoesController < ApplicationController
|
||||
authorize @consolidacao, :update?
|
||||
|
||||
@arquivados = @consolidacao.consolidacao_motoristas.arquivados.order(:motorista_nome)
|
||||
# Alimenta o datalist do "Adicionar motorista" (mesma fonte da criação).
|
||||
@motoristas_disponiveis = Entrega.motoristas_ativos
|
||||
# Alimenta o datalist do "Adicionar motorista": motoristas PREVISTOS no período
|
||||
# da consolidação (atendidas, respeitando filtros de veículo/operação) e os
|
||||
# veículos que cada um usou — para o usuário escolher com contexto.
|
||||
@motoristas_periodo = motoristas_previstos_no_periodo
|
||||
@motoristas = @consolidacao.consolidacao_motoristas.ativos.order(:motorista_nome).map do |cm|
|
||||
total = @consolidacao.entregas_elegiveis_count(cm.motorista_nome)
|
||||
classificadas = @consolidacao.classificadas_count(cm.motorista_nome)
|
||||
@@ -447,6 +450,22 @@ class ConsolidacoesController < ApplicationController
|
||||
@consolidacao = Consolidacao.find(params[:id])
|
||||
end
|
||||
|
||||
# Motoristas com entregas atendidas no período da consolidação (respeitando os
|
||||
# filtros de veículo/operação dela), com os veículos que cada um usou. Alimenta
|
||||
# o datalist de "Adicionar motorista". Retorna [{ nome:, veiculos: [..] }, ...].
|
||||
def motoristas_previstos_no_periodo
|
||||
rel = Entrega.atendidas.da_conta_gade
|
||||
.no_periodo_checkout(@consolidacao.data_inicio, @consolidacao.data_fim)
|
||||
rel = rel.da_veiculo(@consolidacao.vehicle_ids) if @consolidacao.vehicle_ids.present?
|
||||
rel = rel.da_operacoes(@consolidacao.operacoes) if @consolidacao.operacoes.present?
|
||||
|
||||
rel.pluck(:driver, :vehicle)
|
||||
.group_by(&:first)
|
||||
.map { |nome, linhas| { nome: nome, veiculos: linhas.filter_map { |(_, v)| v.presence }.uniq.sort } }
|
||||
.reject { |m| m[:nome].blank? }
|
||||
.sort_by { |m| m[:nome] }
|
||||
end
|
||||
|
||||
# Um motorista específico (consolidacao_motorista_id) ou todos da consolidação.
|
||||
# "Todos" cobre apenas os ATIVOS — motorista arquivado não recebe pagamento.
|
||||
def motoristas_alvo
|
||||
|
||||
@@ -20,4 +20,12 @@ export default class extends Controller {
|
||||
fundo(event) {
|
||||
if (event.target === this.modalTarget) this.fechar()
|
||||
}
|
||||
|
||||
// Preenche o input com o motorista escolhido na lista de previstos.
|
||||
selecionar(event) {
|
||||
if (this.hasInputTarget) {
|
||||
this.inputTarget.value = event.currentTarget.dataset.nome
|
||||
this.inputTarget.focus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,15 +122,34 @@
|
||||
<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>
|
||||
<label class="block text-gray-400 text-sm mb-1">Motorista <span class="text-gray-600">(previstos no período)</span></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>
|
||||
<% Array(@motoristas_periodo).each do |m| %>
|
||||
<option value="<%= m[:nome] %>" label="<%= '🚚 ' + m[:veiculos].join(', ') if m[:veiculos].any? %>"></option>
|
||||
<% end %>
|
||||
</datalist>
|
||||
|
||||
<%# Lista de previstos no período (nome + veículos usados) — clique para preencher %>
|
||||
<% if Array(@motoristas_periodo).any? %>
|
||||
<p class="text-gray-500 text-xs mb-1">Previstos neste período (clique para escolher):</p>
|
||||
<div class="max-h-48 overflow-y-auto space-y-1 mb-4 pr-1">
|
||||
<% @motoristas_periodo.each do |m| %>
|
||||
<button type="button" data-action="adicionar-motorista#selecionar" data-nome="<%= m[:nome] %>"
|
||||
class="w-full text-left px-3 py-2 bg-[#0a0a0a] border border-[#2a2a2a] hover:border-orange-500 rounded-lg">
|
||||
<span class="block text-white text-sm font-semibold"><%= m[:nome] %></span>
|
||||
<% if m[:veiculos].any? %>
|
||||
<span class="block text-gray-500 text-xs">🚚 <%= m[:veiculos].join(', ') %></span>
|
||||
<% end %>
|
||||
</button>
|
||||
<% end %>
|
||||
</div>
|
||||
<% else %>
|
||||
<p class="text-gray-500 text-xs mb-4">Nenhum motorista previsto no período — você ainda pode digitar um nome manualmente.</p>
|
||||
<% end %>
|
||||
|
||||
<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 ✓
|
||||
|
||||
Reference in New Issue
Block a user