80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
|
|
from flask import session, render_template
|
||
|
|
from datetime import datetime
|
||
|
|
from sqlalchemy.sql import func
|
||
|
|
|
||
|
|
from models.entities.militante import Militante
|
||
|
|
from models.entities.cota_mensal import CotaMensal
|
||
|
|
from models.entities.material_vendido import MaterialVendido
|
||
|
|
from models.entities.assinatura_anual import AssinaturaAnual
|
||
|
|
from models.entities.pagamento import Pagamento
|
||
|
|
from models.entities.tipo_pagamento import TipoPagamento
|
||
|
|
from models.entities.usuario import Usuario
|
||
|
|
from services.database_service import DatabaseService
|
||
|
|
|
||
|
|
class HomeController:
|
||
|
|
"""Controlador para página inicial e dashboard"""
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def dashboard():
|
||
|
|
"""Gera dados para o dashboard principal"""
|
||
|
|
db = DatabaseService.get_db_connection()
|
||
|
|
try:
|
||
|
|
# Buscar nome do usuário
|
||
|
|
usuario = db.query(Usuario).get(session.get('user_id'))
|
||
|
|
nome_usuario = usuario.username if usuario else "Usuário"
|
||
|
|
|
||
|
|
# Formatar data atual em português
|
||
|
|
data_atual = datetime.now().strftime("%d de %B de %Y")
|
||
|
|
|
||
|
|
# Buscar dados para o dashboard
|
||
|
|
total_militantes = db.query(Militante).count()
|
||
|
|
total_cotas = db.query(func.sum(CotaMensal.valor_novo)).scalar() or 0
|
||
|
|
total_materiais = db.query(MaterialVendido).count()
|
||
|
|
total_assinaturas = db.query(AssinaturaAnual).count()
|
||
|
|
|
||
|
|
# Buscar últimos militantes cadastrados
|
||
|
|
ultimos_militantes = db.query(Militante)\
|
||
|
|
.order_by(Militante.id.desc())\
|
||
|
|
.limit(5)\
|
||
|
|
.all()
|
||
|
|
|
||
|
|
# Buscar últimos pagamentos
|
||
|
|
ultimos_pagamentos = db.query(Pagamento)\
|
||
|
|
.join(Militante)\
|
||
|
|
.order_by(Pagamento.data_pagamento.desc())\
|
||
|
|
.limit(5)\
|
||
|
|
.all()
|
||
|
|
|
||
|
|
# Buscar tipos de pagamento
|
||
|
|
tipos_pagamento = db.query(TipoPagamento).all()
|
||
|
|
|
||
|
|
return {
|
||
|
|
'nome_usuario': nome_usuario,
|
||
|
|
'data_atual': data_atual,
|
||
|
|
'total_militantes': total_militantes,
|
||
|
|
'total_cotas': "{:.2f}".format(total_cotas),
|
||
|
|
'total_materiais': total_materiais,
|
||
|
|
'total_assinaturas': total_assinaturas,
|
||
|
|
'ultimos_militantes': ultimos_militantes,
|
||
|
|
'ultimos_pagamentos': ultimos_pagamentos,
|
||
|
|
'tipos_pagamento': tipos_pagamento
|
||
|
|
}
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"Erro ao carregar dashboard: {e}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
|
||
|
|
return {
|
||
|
|
'nome_usuario': "Usuário",
|
||
|
|
'data_atual': datetime.now().strftime("%d/%m/%Y"),
|
||
|
|
'total_militantes': 0,
|
||
|
|
'total_cotas': "0.00",
|
||
|
|
'total_materiais': 0,
|
||
|
|
'total_assinaturas': 0,
|
||
|
|
'ultimos_militantes': [],
|
||
|
|
'ultimos_pagamentos': [],
|
||
|
|
'tipos_pagamento': []
|
||
|
|
}
|
||
|
|
finally:
|
||
|
|
db.close()
|