diff --git a/app/controllers/consolidacoes_controller.rb b/app/controllers/consolidacoes_controller.rb index 3051995..2aad23c 100644 --- a/app/controllers/consolidacoes_controller.rb +++ b/app/controllers/consolidacoes_controller.rb @@ -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 diff --git a/app/javascript/controllers/adicionar_motorista_controller.js b/app/javascript/controllers/adicionar_motorista_controller.js index e6d9909..88bd432 100644 --- a/app/javascript/controllers/adicionar_motorista_controller.js +++ b/app/javascript/controllers/adicionar_motorista_controller.js @@ -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() + } + } } diff --git a/app/views/consolidacoes/wizard.html.erb b/app/views/consolidacoes/wizard.html.erb index 9a60892..6905c7f 100644 --- a/app/views/consolidacoes/wizard.html.erb +++ b/app/views/consolidacoes/wizard.html.erb @@ -122,15 +122,34 @@
Inclua um motorista nesta consolidação. Se ele estava arquivado, será restaurado.
<%= form_with url: adicionar_motorista_consolidacao_path(@consolidacao), method: :post do |f| %> - + + + <%# Lista de previstos no período (nome + veículos usados) — clique para preencher %> + <% if Array(@motoristas_periodo).any? %> +Previstos neste período (clique para escolher):
+Nenhum motorista previsto no período — você ainda pode digitar um nome manualmente.
+ <% end %> +