Adição do botão de entrega manual

This commit is contained in:
2026-06-25 11:35:41 -03:00
parent 022aac2616
commit 0c5b5bcbe6
22 changed files with 615 additions and 67 deletions

View File

@@ -5,6 +5,7 @@ class ConsolidacoesController < ApplicationController
before_action :set_consolidacao,
only: %i[show edit update destroy finalizar arquivar reativar wizard
registrar_pagamento cancelar_pagamento
arquivar_motorista desarquivar_motorista
preview_extrato gerar_pdf_relatorio gerar_pdf_extrato
gerar_pdf_financeiro]
@@ -151,7 +152,8 @@ class ConsolidacoesController < ApplicationController
# GET /consolidacoes/:id — visão geral
def show
authorize @consolidacao
@motoristas = @consolidacao.consolidacao_motoristas.order(:motorista_nome)
# A gestão de arquivamento de motorista fica no wizard; aqui listamos só os ativos.
@motoristas = @consolidacao.consolidacao_motoristas.ativos.order(:motorista_nome)
# Apontamentos manuais agrupados por nota (tracking) p/ exibição e remoção.
@apontamentos = @consolidacao.consolidacao_entregas.apontamentos
.order(:motorista_nome, :tracking_id)
@@ -162,7 +164,8 @@ class ConsolidacoesController < ApplicationController
def wizard
authorize @consolidacao, :update?
@motoristas = @consolidacao.consolidacao_motoristas.order(:motorista_nome).map do |cm|
@arquivados = @consolidacao.consolidacao_motoristas.arquivados.order(:motorista_nome)
@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)
apontamentos = @consolidacao.consolidacao_entregas
@@ -265,6 +268,37 @@ class ConsolidacoesController < ApplicationController
redirect_to @consolidacao, notice: pagamento_notice(alvos.size, :estornado)
end
# POST /consolidacoes/:id/arquivar_motorista — arquiva 1 motorista da
# consolidação (reversível). Ele sai dos totais/pagamento/gate, mas os dados
# ficam guardados e podem ser restaurados. Não arquiva motorista já pago.
def arquivar_motorista
authorize @consolidacao, :update?
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 arquivar."
end
cm.arquivar!(current_user)
@consolidacao.recalcular_motorista!(cm.motorista_nome) # tira o valor do total
auditar!(:editar, @consolidacao, dados_novos: { arquivar_motorista: cm.motorista_nome })
redirect_to wizard_consolidacao_path(@consolidacao),
notice: "#{cm.motorista_nome} arquivado. Você pode restaurar quando quiser."
end
# POST /consolidacoes/:id/desarquivar_motorista — restaura um motorista arquivado.
def desarquivar_motorista
authorize @consolidacao, :update?
cm = @consolidacao.consolidacao_motoristas.find(params[:consolidacao_motorista_id])
cm.desarquivar!(current_user)
@consolidacao.recalcular_motorista!(cm.motorista_nome) # devolve o valor ao total
auditar!(:editar, @consolidacao, dados_novos: { desarquivar_motorista: cm.motorista_nome })
redirect_to wizard_consolidacao_path(@consolidacao),
notice: "#{cm.motorista_nome} restaurado para a consolidação."
end
# ── FASE 7 — PDFs ────────────────────────────────────────────
# GET /consolidacoes/:id/gerar_pdf_relatorio?motorista=X
@@ -358,11 +392,12 @@ class ConsolidacoesController < ApplicationController
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
if params[:consolidacao_motorista_id].present?
[@consolidacao.consolidacao_motoristas.find(params[:consolidacao_motorista_id])]
else
@consolidacao.consolidacao_motoristas.to_a
@consolidacao.consolidacao_motoristas.ativos.to_a
end
end