Modificação na area do motorista

This commit is contained in:
2026-08-26 15:34:56 -03:00
parent 7a8ec1bc16
commit 6c78570658
10 changed files with 261 additions and 54 deletions

View File

@@ -7,11 +7,18 @@
# lista, com drill-down no motorista clicado)
# • motorista→ /motorista (o painel, já recortado nele — mesma conta, mesmo PDF)
#
# RECORTE (igual ao filtro da lista de consolidações): entram as consolidações
# ATIVAS cujo período está DENTRO da faixa escolhida (data_inicio >= inicio e
# data_fim <= fim). Não é sobreposição de propósito — uma consolidação que
# atravessa a borda do filtro entraria inteira e o "total do período" ficaria
# maior que o período.
# RECORTE — É O MESMO DO DASHBOARD FINANCEIRO, de propósito
# (DashboardController#carregar_dados_financeiro). Os dois números são lidos lado
# a lado pelo operador; quando divergem, a leitura é "o sistema está errado".
# Entram as consolidações ATIVAS que:
# • CRUZAM o período (data_inicio <= fim AND data_fim >= inicio) — um
# fechamento de 01/08 a 31/08 aparece ao filtrar 01/0826/08; OU
# • tiveram algum PAGAMENTO dentro do período (pagar em agosto um fechamento
# de julho tem que aparecer em agosto).
#
# STATUS: por padrão só as FINALIZADAS — é o "Consolidado" do dashboard, o valor
# que já fechou. 'todos' inclui os rascunhos em andamento (a visão "Geral"), que
# ainda mudam de valor.
#
# Só motoristas ATIVOS (não arquivados) contam: é o mesmo conjunto que a
# consolidação paga (ConsolidacaoMotorista.ativos), então o total desta tela
@@ -36,15 +43,12 @@ module Analytics
# telas mostram nome/período/status dela em seguida).
def registros
@registros ||= begin
base = Consolidacao.ativas.no_periodo(@inicio, @fim)
# Por padrão só o que já foi FECHADO conta como total do período —
# rascunho ainda muda de valor. `merge` (e não where(consolidacoes:
# {status: ...})) porque status é enum: quem traduz :finalizada é o model.
base = Consolidacao.ativas
# `public_send` sobre o enum: quem traduz :finalizada/:rascunho é o model.
base = base.public_send(@status) if %w[finalizada rascunho].include?(@status)
escopo = ConsolidacaoMotorista.ativos
.joins(:consolidacao)
.merge(base)
.where(consolidacao_id: ids_do_periodo(base))
.includes(:consolidacao)
escopo = escopo.where(motorista_nome: @motorista) if @motorista
escopo = escopo.where('motorista_nome ILIKE ?', "%#{@busca}%") if @busca
@@ -94,6 +98,19 @@ module Analytics
private
# As consolidações do período: as que cruzam a faixa + as que receberam
# pagamento dentro dela. Mesmo par de conjuntos do dashboard financeiro.
def ids_do_periodo(base)
intervalo = @inicio.beginning_of_day..@fim.end_of_day
cruzam = base.cruzando_periodo(@inicio, @fim).ids
pagas = ConsolidacaoMotorista.ativos
.where(pago_em: intervalo)
.where(consolidacao_id: base.select(:id))
.distinct.pluck(:consolidacao_id)
(cruzam + pagas).uniq
end
def soma(cms)
cms.sum { |cm| cm.valor_total || 0 }
end