Correção def adicionar_motorista authorize @consolidacao, :update?e na busca na adição dos motoristas

This commit is contained in:
2026-06-26 11:38:35 -03:00
parent 1ad1d4c143
commit b659a66612
3 changed files with 51 additions and 5 deletions

View File

@@ -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