Modificação na area do motorista
This commit is contained in:
@@ -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/08–26/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
|
||||
|
||||
Reference in New Issue
Block a user