Melhorada interface dos formulários. Adicionado a opção de editar os Militantes direto da Lista

This commit is contained in:
LS
2025-02-20 10:39:31 -03:00
parent 765688df1f
commit 37d45e250f
14 changed files with 341 additions and 84 deletions

68
app.py
View File

@@ -1,5 +1,4 @@
from flask import Flask, request, render_template, redirect, url_for
from functions.database import execute_query
from flask import Flask, request, render_template, redirect, url_for, flash
from functions.database import (
Base,
Militante,
@@ -19,11 +18,14 @@ from sqlalchemy import create_engine, and_
from sqlalchemy.orm import sessionmaker
from datetime import datetime
from flask_bootstrap import Bootstrap5
from routes.cota import cota_bp
from functions.validations import validar_cpf
Session = sessionmaker(bind=engine)
session = Session()
app = Flask(__name__)
app.secret_key = 'sua_chave_secreta_aqui'
bootstrap = Bootstrap5(app)
@@ -40,17 +42,24 @@ def session_run(model):
@app.route("/militantes/novo", methods=["GET", "POST"])
def novo_militante():
if request.method == "POST":
cpf = request.form["cpf"]
if not validar_cpf(cpf):
flash('CPF inválido. Por favor, verifique o número informado.', 'error')
return render_template("novo_militante.html",
dados_anteriores=request.form)
novo_militante = Militante(
nome=request.form["nome"],
cpf=request.form["cpf"],
cpf=cpf,
email=request.form["email"],
telefone=request.form["telefone"],
endereco=request.form["endereco"],
filiado=request.form.get("filiado", False),
filiado=bool(request.form.get("filiado", False))
)
session_run(novo_militante)
# execute_query(query, (nome, cpf, email, telefone, endereco, filiado))
flash('Militante cadastrado com sucesso!', 'success')
return redirect(url_for("listar_militantes"))
return render_template("novo_militante.html")
@@ -147,7 +156,7 @@ def nova_venda_jornal():
data_venda=datetime.strptime(request.form["data_venda"], "%Y-%m-%d"),
)
session_run(VendaJornalAvulso)
session_run(vendas_jornais_avulsos)
return redirect(url_for("listar_vendas_jornal"))
return render_template("nova_venda_jornal.html")
@@ -236,11 +245,14 @@ def listar_relatorios_vendas():
@app.route("/")
def home():
"""Página inicial do sistema"""
links = []
for rule in app.url_map.iter_rules():
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
# Substituindo 'home' por 'início' no menu
endpoint_name = 'Início' if rule.endpoint == 'home' else rule.endpoint
links.append((url, endpoint_name))
return render_template('home.html', links=links)
@@ -251,6 +263,48 @@ def has_no_empty_params(rule):
return len(defaults) >= len(arguments)
@app.route("/militantes/editar/<int:id>", methods=["GET", "POST"])
def editar_militante(id):
militante = session.query(Militante).get(id)
if not militante:
flash('Militante não encontrado.', 'error')
return redirect(url_for('listar_militantes'))
if request.method == "POST":
cpf = request.form["cpf"]
if cpf != militante.cpf and not validar_cpf(cpf): # Só valida se o CPF foi alterado
flash('CPF inválido. Por favor, verifique o número informado.', 'error')
return render_template("editar_militante.html", militante=militante)
try:
militante.nome = request.form["nome"]
militante.cpf = cpf
militante.email = request.form["email"]
militante.telefone = request.form["telefone"]
militante.endereco = request.form["endereco"]
militante.filiado = bool(request.form.get("filiado", False))
session.commit()
flash('Militante atualizado com sucesso!', 'success')
return redirect(url_for('listar_militantes'))
except Exception as e:
session.rollback()
flash('Erro ao atualizar militante. Verifique se o CPF ou email já não estão cadastrados.', 'error')
return render_template("editar_militante.html", militante=militante)
return render_template("editar_militante.html", militante=militante)
def create_app():
app = Flask(__name__)
# ... existing code ...
app.register_blueprint(cota_bp)
# ... existing code ...
return app
# Iniciar o servidor Flask
if __name__ == "__main__":
app.run(debug=True)