Melhorias gerais descritas no READ.me

This commit is contained in:
2026-06-26 11:30:35 -03:00
parent 1ca5fc67d7
commit 1ad1d4c143
8 changed files with 198 additions and 23 deletions

View File

@@ -165,6 +165,8 @@ 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
@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)
@@ -299,6 +301,59 @@ class ConsolidacoesController < ApplicationController
notice: "#{cm.motorista_nome} restaurado para a consolidação."
end
# DELETE /consolidacoes/:id/excluir_motorista — apaga de vez 1 motorista desta
# consolidação (só admin/gerente). Caminho destrutivo (o reversível é arquivar):
# como consolidacao_entregas se liga ao motorista por STRING (motorista_nome,
# sem FK/cascade), apagamos os lançamentos dele à mão antes de remover o registro.
def excluir_motorista
authorize @consolidacao, :destroy?
cm = @consolidacao.consolidacao_motoristas.find(params[:consolidacao_motorista_id])
if cm.pago?
return redirect_to wizard_consolidacao_path(@consolidacao),
alert: "#{cm.motorista_nome} já está pago — estorne o pagamento antes de excluir."
end
nome = cm.motorista_nome
ActiveRecord::Base.transaction do
@consolidacao.consolidacao_entregas.where(motorista_nome: nome).delete_all
cm.destroy!
end
# cm já não existe — atualiza o total da consolidação direto (soma dos ativos).
@consolidacao.update_column(:valor_total, @consolidacao.consolidacao_motoristas.ativos.sum(:valor_total))
auditar!(:editar, @consolidacao, dados_novos: { excluir_motorista: nome })
redirect_to wizard_consolidacao_path(@consolidacao),
notice: "#{nome} excluído desta consolidação."
end
# POST /consolidacoes/:id/adicionar_motorista — inclui um motorista nesta
# consolidação (ou restaura, se estava arquivado). Útil para refazer rápido
# depois de excluir/arquivar por erro de precificação.
def adicionar_motorista
authorize @consolidacao, :update?
nome = params[:motorista_nome].to_s.strip
if nome.blank?
return redirect_to wizard_consolidacao_path(@consolidacao), alert: 'Informe o nome do motorista.'
end
cm = @consolidacao.consolidacao_motoristas.find_or_initialize_by(motorista_nome: nome)
aviso =
if cm.persisted? && cm.arquivado?
cm.desarquivar!(current_user)
"#{nome} restaurado para a consolidação."
elsif cm.persisted?
"#{nome} já está nesta consolidação."
else
cm.save!
"#{nome} adicionado à consolidação."
end
@consolidacao.recalcular_motorista!(nome)
auditar!(:editar, @consolidacao, dados_novos: { adicionar_motorista: nome })
redirect_to wizard_consolidacao_path(@consolidacao), notice: aviso
end
# ── FASE 7 — PDFs ────────────────────────────────────────────
# GET /consolidacoes/:id/gerar_pdf_relatorio?motorista=X