Criação da visão geral da consolidação por motorista

This commit is contained in:
2026-08-26 11:15:52 -03:00
parent 8d24a57579
commit cd99a22553
12 changed files with 841 additions and 3 deletions

View File

@@ -54,8 +54,60 @@ module Motorista
.includes(:consolidacao)
end
# GET /motorista/totais?inicio=&fim=
#
# "Quanto eu fechei neste período e de onde vem esse valor". O card do painel
# mostra só o total acumulado; aqui o motorista escolhe o período, vê o total
# FECHADO (consolidações finalizadas) e a lista de consolidações que compõem
# o valor — a mesma conta que o admin vê em /consolidacoes/totais, montada
# pelo mesmo service para os dois números não poderem divergir.
def totais
@inicio, @fim = periodo_totais
@totais = totais_do_periodo
@consolidacoes = @totais.consolidacoes_de(current_user.nome)
end
# GET /motorista/totais/pdf — o extrato do período em PDF (com assinatura),
# para o motorista guardar ou mandar por WhatsApp.
def totais_pdf
inicio, fim = periodo_totais
totais = Analytics::TotaisPorMotorista.new(
inicio: inicio, fim: fim, motorista: current_user.nome
)
arquivo = ['meu_total', current_user.nome.parameterize(separator: '_'),
inicio.strftime('%Y%m%d'), fim.strftime('%Y%m%d')].join('_')
send_data Pdf::TotaisMotoristaPdf.new(totais: totais).render,
filename: "#{arquivo}.pdf",
type: 'application/pdf',
disposition: 'attachment'
end
private
def totais_do_periodo
Analytics::TotaisPorMotorista.new(
inicio: @inicio, fim: @fim, motorista: current_user.nome
)
end
# Default: mês corrente INTEIRO (fim = último dia do mês). O recorte pede a
# consolidação inteira dentro da faixa, então terminar em "hoje" esconderia
# um fechamento que vai até o fim do mês. Mesma regra do relatório do admin.
def periodo_totais
inicio = parse_data(params[:inicio]) || Date.current.beginning_of_month
fim = parse_data(params[:fim]) || Date.current.end_of_month
inicio, fim = fim, inicio if fim < inicio
[inicio, fim]
end
def parse_data(str)
return nil if str.blank?
Date.parse(str)
rescue ArgumentError, TypeError
nil
end
def garantir_motorista
return if current_user.motorista?
redirect_to dashboard_path, alert: 'Área exclusiva dos motoristas.'