Melhorada interface dos formulários. Adicionado a opção de editar os Militantes direto da Lista
This commit is contained in:
68
app.py
68
app.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user