65 lines
3.1 KiB
Ruby
65 lines
3.1 KiB
Ruby
# app/controllers/motorista/dashboard_controller.rb
|
||
module Motorista
|
||
class DashboardController < ApplicationController
|
||
before_action :garantir_motorista
|
||
|
||
# GET /motorista
|
||
def index
|
||
nome = current_user.nome
|
||
|
||
# Card 1 — Valor ESTIMADO (mês atual): entregas ATENDIDAS × preco_entrega.
|
||
#
|
||
# Atendida = o motorista FOI ao local e fechou a visita, com sucesso
|
||
# ('completed') OU insucesso ('failed') — no insucesso o deslocamento
|
||
# aconteceu e teve custo, então a empresa paga os dois. É o MESMO recorte do
|
||
# dashboard administrativo e da consolidação (ver Entrega::STATUS_ATENDIDO e
|
||
# Entrega.contar_atendidas): usava `pagas` (só concluídas) e o motorista via
|
||
# um valor MENOR que o do fechamento, sem entender de onde vinha a diferença.
|
||
#
|
||
# ⚠️ O eixo é o CHECKOUT (data real da visita), não planned_date: falhada TEM
|
||
# checkout, e uma entrega planejada em 31/07 mas fechada em 01/08 pertence a
|
||
# agosto — igual ao que a consolidação considera elegível.
|
||
@estimado_inicio = Date.current.beginning_of_month
|
||
@estimado_fim = Date.current
|
||
atendidas = Entrega.atendidas.da_conta_gade
|
||
.do_motorista(nome)
|
||
.no_periodo_checkout(@estimado_inicio, @estimado_fim)
|
||
@entregas_concluidas = atendidas.concluidas.count
|
||
@entregas_falhadas = atendidas.falhadas.count
|
||
@entregas_mes = @entregas_concluidas + @entregas_falhadas
|
||
@valor_estimado = @entregas_mes * Configuracao.preco_entrega
|
||
|
||
# Card 2 — Valor CONSOLIDADO: soma das consolidações finalizadas
|
||
@minhas_consolidacoes = Consolidacao.ativas
|
||
.joins(:consolidacao_motoristas)
|
||
.where(consolidacao_motoristas: { motorista_nome: nome, arquivado_em: nil })
|
||
.recentes
|
||
.distinct
|
||
|
||
@valor_consolidado = ConsolidacaoMotorista.ativos
|
||
.joins(:consolidacao)
|
||
.where(motorista_nome: nome,
|
||
consolidacoes: { status: :finalizada, deleted_at: nil })
|
||
.sum(:valor_total)
|
||
|
||
# Aviso in-app: pagamentos confirmados nos últimos 7 dias (notificação na
|
||
# própria página do motorista, além de WhatsApp/email).
|
||
@pagamentos_recentes = ConsolidacaoMotorista
|
||
.joins(:consolidacao)
|
||
.where(motorista_nome: nome,
|
||
consolidacoes: { status: :finalizada, deleted_at: nil })
|
||
.where.not(pago_em: nil)
|
||
.where('pago_em >= ?', 7.days.ago)
|
||
.order(pago_em: :desc)
|
||
.includes(:consolidacao)
|
||
end
|
||
|
||
private
|
||
|
||
def garantir_motorista
|
||
return if current_user.motorista?
|
||
redirect_to dashboard_path, alert: 'Área exclusiva dos motoristas.'
|
||
end
|
||
end
|
||
end
|