51 lines
2.1 KiB
Ruby
51 lines
2.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 pagas × preco_entrega
|
||
entregas_mes = Entrega.pagas.da_conta_gade
|
||
.do_motorista(nome)
|
||
.no_periodo(Date.current.beginning_of_month, Date.current)
|
||
.count
|
||
@valor_estimado = entregas_mes * Configuracao.preco_entrega
|
||
@entregas_mes = entregas_mes
|
||
|
||
# Card 2 — Valor CONSOLIDADO: soma das consolidações finalizadas
|
||
@minhas_consolidacoes = Consolidacao.ativas
|
||
.joins(:consolidacao_motoristas)
|
||
.where(consolidacao_motoristas: { motorista_nome: nome })
|
||
.recentes
|
||
.distinct
|
||
|
||
@valor_consolidado = ConsolidacaoMotorista
|
||
.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
|