fix: corrige problemas de permissões e rotas

This commit is contained in:
andersonid
2025-04-04 02:34:51 -03:00
parent 241543ea63
commit 745803fef3
5 changed files with 110 additions and 513 deletions

78
app.py
View File

@@ -60,6 +60,12 @@ login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
# Adicionar filtros Jinja2
@app.template_filter('bitwise_and')
def bitwise_and(value1, value2):
"""Filtro para operação bit a bit AND"""
return value1 & value2
@login_manager.user_loader
def load_user(user_id):
"""Carrega o usuário pelo ID"""
@@ -381,20 +387,12 @@ def criar_militante():
# Rota para listar militantes
@app.route("/militantes")
@require_login
@require_permission(Permission.VIEW_CELL_DATA)
@require_permission(Permission.MANAGE_CELL_MEMBERS)
def listar_militantes():
db = get_db_connection()
try:
print("Buscando militantes...")
db = get_db_connection()
militantes = db.query(Militante).order_by(Militante.nome).all()
print(f"Total de militantes encontrados: {len(militantes)}")
for militante in militantes:
print(f"Militante: {militante.nome} (ID: {militante.id})")
return render_template("listar_militantes.html", militantes=militantes)
except Exception as e:
print(f"Erro ao listar militantes: {e}")
flash('Erro ao listar militantes', 'danger')
return render_template("listar_militantes.html", militantes=[])
militantes = db.query(Militante).all()
return render_template('listar_militantes.html', militantes=militantes)
finally:
db.close()
@@ -424,7 +422,7 @@ def excluir_militante(id):
# Rota para criar uma nova cota
@app.route("/cotas/novo", methods=["GET", "POST"])
@require_login
@require_permission(Permission.VIEW_CELL_REPORTS)
@require_permission(Permission.MANAGE_CELL_REPORTS)
def nova_cota():
if request.method == "POST":
militante_id = request.form.get("militante_id")
@@ -479,19 +477,16 @@ def nova_cota():
# Rota para listar cotas
@app.route("/cotas")
@require_login
@require_permission(Permission.VIEW_CELL_REPORTS)
@require_permission(Permission.MANAGE_CELL_REPORTS)
def listar_cotas():
try:
print("Buscando cotas...")
# Buscar cotas com informações do militante
db = get_db_connection()
cotas = db.query(CotaMensal)\
.join(Militante)\
.order_by(CotaMensal.data_vencimento.desc())\
.all()
print(f"Total de cotas encontradas: {len(cotas)}")
# Calcular status de cada cota
for cota in cotas:
if cota.pago:
@@ -500,7 +495,6 @@ def listar_cotas():
cota.status = "atrasada"
else:
cota.status = "pendente"
print(f"Cota {cota.id}: Militante={cota.militante.nome}, Valor={cota.valor_novo}, Status={cota.status}")
# Buscar militantes para o modal de nova cota
militantes = db.query(Militante).order_by(Militante.nome).all()
@@ -622,18 +616,60 @@ def novo_pagamento():
# Rota para listar pagamentos
@app.route("/pagamentos")
@require_login
@require_permission(Permission.MANAGE_CELL_REPORTS)
def listar_pagamentos():
try:
print("Buscando pagamentos...")
db = get_db_connection()
pagamentos = db.query(Pagamento).order_by(Pagamento.data_pagamento.desc()).all()
return render_template("listar_pagamentos.html", pagamentos=pagamentos)
pagamentos = db.query(Pagamento)\
.join(Militante)\
.order_by(Pagamento.data_pagamento.desc())\
.all()
militantes = db.query(Militante).order_by(Militante.nome).all()
tipos_pagamento = db.query(TipoPagamento).all()
return render_template("listar_pagamentos.html",
pagamentos=pagamentos,
militantes=militantes,
tipos_pagamento=tipos_pagamento)
except Exception as e:
print(f"Erro ao listar pagamentos: {e}")
flash('Erro ao listar pagamentos', 'danger')
return render_template("listar_pagamentos.html", pagamentos=[])
return render_template("listar_pagamentos.html", pagamentos=[], militantes=[])
finally:
db.close()
# Rota para adicionar pagamento
@app.route("/pagamentos/adicionar", methods=["POST"])
@require_login
@require_permission(Permission.MANAGE_CELL_REPORTS)
def adicionar_pagamento():
if request.method == "POST":
try:
militante_id = request.form.get("militante_id")
tipo_pagamento = request.form.get("tipo_pagamento")
valor = float(request.form.get("valor"))
data_pagamento = datetime.strptime(request.form.get("data_pagamento"), "%Y-%m-%d").date()
db = get_db_connection()
pagamento = Pagamento(
militante_id=militante_id,
tipo_pagamento=tipo_pagamento,
valor=valor,
data_pagamento=data_pagamento
)
db.add(pagamento)
db.commit()
flash('Pagamento adicionado com sucesso!', 'success')
except Exception as e:
db.rollback()
flash(f'Erro ao adicionar pagamento: {str(e)}', 'danger')
finally:
db.close()
return redirect(url_for('listar_pagamentos'))
# Rota para criar um novo material vendido
@app.route("/materiais/novo", methods=["GET", "POST"])
@require_login