Criação da visão geral da consolidação por motorista e Estilização
This commit is contained in:
@@ -3,8 +3,9 @@
|
||||
# Quanto cada motorista somou no período — e QUAIS consolidações formam esse
|
||||
# total. É a fonte única das duas telas de "total por motorista":
|
||||
#
|
||||
# • admin → /consolidacoes/totais (todos os motoristas + drill-down)
|
||||
# • motorista→ /motorista/totais (só ele, mesma conta, mesmo PDF)
|
||||
# • admin → /consolidacoes?visao=motoristas (modo de visualização da própria
|
||||
# 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
|
||||
@@ -17,30 +18,36 @@
|
||||
# bate com a soma dos fechamentos.
|
||||
module Analytics
|
||||
class TotaisPorMotorista
|
||||
def initialize(inicio:, fim:, motorista: nil, incluir_rascunhos: false)
|
||||
@inicio = inicio.to_date
|
||||
@fim = fim.to_date
|
||||
@motorista = motorista.presence
|
||||
@incluir_rascunhos = incluir_rascunhos
|
||||
# status: 'finalizada' (padrão — só o que já fechou), 'rascunho' ou
|
||||
# 'todos'. É o MESMO select de status da lista de consolidações.
|
||||
# motorista: recorte exato (drill-down / painel do motorista).
|
||||
# busca: filtro parcial por nome, o campo de busca da lista.
|
||||
def initialize(inicio:, fim:, motorista: nil, status: 'finalizada', busca: nil)
|
||||
@inicio = inicio.to_date
|
||||
@fim = fim.to_date
|
||||
@motorista = motorista.presence
|
||||
@status = status.presence || 'finalizada'
|
||||
@busca = busca.presence
|
||||
end
|
||||
|
||||
attr_reader :inicio, :fim, :motorista
|
||||
attr_reader :inicio, :fim, :motorista, :status
|
||||
|
||||
# ConsolidacaoMotorista do recorte, com a consolidação já carregada (as duas
|
||||
# telas mostram nome/período/status dela em seguida).
|
||||
def registros
|
||||
@registros ||= begin
|
||||
base = Consolidacao.ativas.no_periodo(@inicio, @fim)
|
||||
# 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 sabe traduzir :finalizada é o próprio model.
|
||||
base = base.finalizada unless @incluir_rascunhos
|
||||
# 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 = base.public_send(@status) if %w[finalizada rascunho].include?(@status)
|
||||
|
||||
escopo = ConsolidacaoMotorista.ativos
|
||||
.joins(:consolidacao)
|
||||
.merge(base)
|
||||
.includes(:consolidacao)
|
||||
escopo = escopo.where(motorista_nome: @motorista) if @motorista
|
||||
escopo = escopo.where('motorista_nome ILIKE ?', "%#{@busca}%") if @busca
|
||||
escopo.to_a
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user