Fases 7 e 8 — PDFs Prawn + QR + Painel Motorista + Notificações

This commit is contained in:
2026-06-11 18:31:38 -03:00
parent 90ed705ed8
commit 8b3d4bc87f
21 changed files with 942 additions and 23 deletions

View File

@@ -99,7 +99,8 @@ class ConsolidacoesController < ApplicationController
if @consolidacao.finalizar!(current_user)
auditar!(:finalizar, @consolidacao)
redirect_to @consolidacao, notice: 'Consolidação finalizada com sucesso!'
NotificacaoService.notificar_finalizacao(@consolidacao) # WhatsApp/email aos motoristas
redirect_to @consolidacao, notice: 'Consolidação finalizada! Motoristas notificados.'
else
redirect_to wizard_consolidacao_path(@consolidacao),
alert: 'Não é possível finalizar: existem entregas não classificadas.'
@@ -114,6 +115,49 @@ class ConsolidacoesController < ApplicationController
redirect_to consolidacoes_path, notice: 'Consolidação arquivada.'
end
# ── FASE 7 — PDFs ────────────────────────────────────────────
# GET /consolidacoes/:id/gerar_pdf_relatorio?motorista=X
def gerar_pdf_relatorio
authorize @consolidacao, :show?
motorista = params[:motorista]
pdf = Pdf::RelatorioMotoristaPdf.new(consolidacao: @consolidacao, motorista: motorista)
auditar!(:editar, @consolidacao, dados_novos: { pdf: 'relatorio', motorista: motorista })
send_data pdf.render,
filename: "relatorio_#{motorista.parameterize}_#{@consolidacao.id}.pdf",
type: 'application/pdf',
disposition: 'attachment'
end
# GET /consolidacoes/:id/gerar_pdf_holerite?motorista=X
def gerar_pdf_holerite
authorize @consolidacao, :show?
motorista = params[:motorista]
user_mot = User.motorista.find_by('LOWER(nome) = ?', motorista.to_s.downcase)
user_mot&.regenerar_login_token! if user_mot&.login_token.blank?
pdf = Pdf::HoleritePdf.new(consolidacao: @consolidacao, motorista: motorista,
user_motorista: user_mot, app_host: ENV['APP_HOST'])
auditar!(:editar, @consolidacao, dados_novos: { pdf: 'holerite', motorista: motorista })
send_data pdf.render,
filename: "holerite_#{motorista.parameterize}_#{@consolidacao.id}.pdf",
type: 'application/pdf',
disposition: 'attachment'
end
# GET /consolidacoes/:id/preview_holerite?motorista=X — preview HTML antes do PDF
def preview_holerite
authorize @consolidacao, :show?
@motorista = params[:motorista]
@entregas = @consolidacao.consolidacao_entregas.where(motorista_nome: @motorista)
@resumo = @entregas.group(:tipo).count
@total = @entregas.sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado }
render layout: false # renderiza dentro do modal (Turbo Frame)
end
private
def set_consolidacao