refactor: renomeia pagamentos para comprovantes e adiciona novos tipos

This commit is contained in:
LS
2025-04-15 18:04:50 -03:00
parent f87e03640d
commit 63ebf09fb6
13 changed files with 765 additions and 341 deletions

186
app.py
View File

@@ -1650,6 +1650,192 @@ def create_app():
finally:
db.close()
@app.route("/comprovantes/novo", methods=["GET", "POST"])
@require_login
def novo_comprovante():
if request.method == "POST":
# Verificar permissão para tipos específicos de comprovante
tipo_comprovante = request.form.get('tipo_comprovante')
if tipo_comprovante not in ['1'] and not current_user.has_permission(Permission.MANAGE_PAYMENT_TYPES):
flash('Você não tem permissão para registrar este tipo de comprovante.', 'error')
return redirect(url_for('novo_comprovante'))
try:
militante_id = request.form.get("militante_id")
tipo_comprovante = request.form.get("tipo_comprovante")
data_comprovante = request.form.get("data_comprovante")
if not all([militante_id, tipo_comprovante, data_comprovante]):
flash("Todos os campos são obrigatórios", "danger")
return redirect(url_for("novo_comprovante"))
db = get_db_connection()
comprovante = Comprovante(
militante_id=militante_id,
tipo_comprovante=tipo_comprovante,
data_comprovante=data_comprovante
)
db.add(comprovante)
db.commit()
flash("Comprovante cadastrado com sucesso!", "success")
return redirect(url_for("listar_comprovantes"))
except Exception as e:
db.rollback()
flash(f"Erro ao cadastrar comprovante: {str(e)}", "danger")
return redirect(url_for("novo_comprovante"))
return render_template("novo_comprovante.html")
@app.route("/comprovantes")
@require_login
@require_permission(Permission.MANAGE_CELL_REPORTS)
def listar_comprovantes():
db = get_db_connection()
try:
comprovantes = db.query(Comprovante).join(Militante).all()
militantes = db.query(Militante).all()
return render_template("listar_comprovantes.html",
comprovantes=comprovantes,
militantes=militantes)
finally:
db.close()
@app.route("/comprovantes/adicionar", methods=["POST"])
@require_login
@require_permission(Permission.MANAGE_CELL_REPORTS)
def adicionar_comprovante():
# Verificar permissão para tipos específicos de comprovante
tipo_comprovante = request.form.get('tipo_comprovante')
if tipo_comprovante not in ['1'] and not current_user.has_permission(Permission.MANAGE_PAYMENT_TYPES):
flash('Você não tem permissão para registrar este tipo de comprovante.', 'error')
return redirect(url_for('listar_comprovantes'))
try:
militante_id = request.form.get("militante_id")
tipo_comprovante = request.form.get("tipo_comprovante")
data_comprovante = request.form.get("data_comprovante")
if not all([militante_id, tipo_comprovante, data_comprovante]):
flash("Todos os campos são obrigatórios", "danger")
return redirect(url_for("adicionar_comprovante"))
db = get_db_connection()
comprovante = Comprovante(
militante_id=militante_id,
tipo_comprovante=tipo_comprovante,
data_comprovante=data_comprovante
)
db.add(comprovante)
db.commit()
flash("Comprovante adicionado com sucesso!", "success")
return redirect(url_for("listar_comprovantes"))
except Exception as e:
db.rollback()
flash(f"Erro ao adicionar comprovante: {str(e)}", "danger")
return redirect(url_for("adicionar_comprovante"))
return render_template("adicionar_comprovante.html")
@app.route('/celulas/<int:celula_id>/comprovantes')
@require_login
def list_comprovantes_celula(celula_id):
@require_instance_access('celula', celula_id)
def decorated_function(celula_id):
db = get_db_connection()
try:
comprovantes = db.query(Comprovante).filter_by(celula_id=celula_id).all()
return render_template('comprovantes/list.html', comprovantes=comprovantes)
finally:
db.close()
return decorated_function(celula_id)
@app.route('/setores/<int:setor_id>/comprovantes')
@require_login
def list_comprovantes_setor(setor_id):
@require_instance_access('setor', setor_id)
def decorated_function(setor_id):
db = get_db_connection()
try:
comprovantes = db.query(Comprovante).join(Usuario).filter(Usuario.setor_id == setor_id).all()
return render_template('comprovantes/list.html', comprovantes=comprovantes)
finally:
db.close()
return decorated_function(setor_id)
@app.route('/crs/<int:cr_id>/comprovantes')
@require_login
def list_comprovantes_cr(cr_id):
@require_instance_access('cr', cr_id)
def decorated_function(cr_id):
db = get_db_connection()
try:
comprovantes = db.query(Comprovante).join(Usuario).filter(Usuario.cr_id == cr_id).all()
return render_template('comprovantes/list.html', comprovantes=comprovantes)
finally:
db.close()
return decorated_function(cr_id)
@app.route('/celulas/<int:celula_id>/comprovantes/novo', methods=['GET', 'POST'])
@require_login
@require_instance_permission('REGISTER_CELL_PAYMENT', 'celula_id')
def novo_comprovante_celula(celula_id):
if request.method == 'POST':
db = get_db_connection()
try:
comprovante = Comprovante(
valor=request.form['valor'],
data=request.form['data'],
militante_id=request.form['militante_id'],
celula_id=celula_id
)
db.add(comprovante)
db.commit()
flash('Comprovante registrado com sucesso!', 'success')
return redirect(url_for('list_comprovantes_celula', celula_id=celula_id))
finally:
db.close()
return render_template('comprovantes/form.html')
@app.route('/setores/<int:setor_id>/comprovantes/novo', methods=['GET', 'POST'])
@require_login
@require_instance_permission('REGISTER_SECTOR_PAYMENT', 'setor_id')
def novo_comprovante_setor(setor_id):
if request.method == 'POST':
db = get_db_connection()
try:
comprovante = Comprovante(
valor=request.form['valor'],
data=request.form['data'],
militante_id=request.form['militante_id'],
setor_id=setor_id
)
db.add(comprovante)
db.commit()
flash('Comprovante registrado com sucesso!', 'success')
return redirect(url_for('list_comprovantes_setor', setor_id=setor_id))
finally:
db.close()
return render_template('comprovantes/form.html')
@app.route('/crs/<int:cr_id>/comprovantes/novo', methods=['GET', 'POST'])
@require_login
@require_instance_permission('REGISTER_CR_PAYMENT', 'cr_id')
def novo_comprovante_cr(cr_id):
if request.method == 'POST':
db = get_db_connection()
try:
comprovante = Comprovante(
valor=request.form['valor'],
data=request.form['data'],
militante_id=request.form['militante_id'],
cr_id=cr_id
)
db.add(comprovante)
db.commit()
flash('Comprovante registrado com sucesso!', 'success')
return redirect(url_for('list_comprovantes_cr', cr_id=cr_id))
finally:
db.close()
return render_template('comprovantes/form.html')
return app
def init_system():