117 lines
4.7 KiB
Python
117 lines
4.7 KiB
Python
|
|
from flask import Blueprint, render_template, redirect, url_for, request, jsonify, flash
|
||
|
|
from flask_login import login_required
|
||
|
|
|
||
|
|
from services.pagamento_service import PagamentoService
|
||
|
|
from services.militante_service import MilitanteService
|
||
|
|
from services.tipo_pagamento_service import TipoPagamentoService
|
||
|
|
from functions.decorators import require_permission
|
||
|
|
from utils.date_utils import validar_data, converter_data
|
||
|
|
|
||
|
|
pagamento_bp = Blueprint('pagamento', __name__, url_prefix='/pagamentos')
|
||
|
|
|
||
|
|
@pagamento_bp.route("/")
|
||
|
|
@login_required
|
||
|
|
@require_permission('gerenciar_pagamentos')
|
||
|
|
def listar():
|
||
|
|
"""Lista todos os pagamentos"""
|
||
|
|
pagamentos = PagamentoService.listar_pagamentos()
|
||
|
|
militantes = MilitanteService.listar_militantes()
|
||
|
|
tipos_pagamento = TipoPagamentoService.listar_tipos_pagamento()
|
||
|
|
|
||
|
|
return render_template("listar_pagamentos.html",
|
||
|
|
pagamentos=pagamentos,
|
||
|
|
militantes=militantes,
|
||
|
|
tipos_pagamento=tipos_pagamento)
|
||
|
|
|
||
|
|
@pagamento_bp.route("/novo", methods=["GET", "POST"])
|
||
|
|
@login_required
|
||
|
|
@require_permission('gerenciar_pagamentos')
|
||
|
|
def novo():
|
||
|
|
"""Cria um novo pagamento"""
|
||
|
|
if request.method == "POST":
|
||
|
|
militante_id = request.form.get("militante_id")
|
||
|
|
tipo_pagamento_id = request.form.get("tipo_pagamento_id")
|
||
|
|
valor = float(request.form.get("valor"))
|
||
|
|
data_pagamento = converter_data(request.form.get("data_pagamento"))
|
||
|
|
|
||
|
|
if not validar_data(data_pagamento):
|
||
|
|
flash('Data de pagamento inválida ou futura', 'danger')
|
||
|
|
return redirect(url_for('pagamento.novo'))
|
||
|
|
|
||
|
|
if PagamentoService.criar_pagamento(militante_id, tipo_pagamento_id, valor, data_pagamento):
|
||
|
|
flash('Pagamento cadastrado com sucesso!', 'success')
|
||
|
|
return redirect(url_for('pagamento.listar'))
|
||
|
|
else:
|
||
|
|
flash('Erro ao cadastrar pagamento', 'danger')
|
||
|
|
return redirect(url_for('pagamento.novo'))
|
||
|
|
|
||
|
|
# GET
|
||
|
|
militantes = MilitanteService.listar_militantes()
|
||
|
|
tipos_pagamento = TipoPagamentoService.listar_tipos_pagamento()
|
||
|
|
return render_template("novo_pagamento.html",
|
||
|
|
militantes=militantes,
|
||
|
|
tipos_pagamento=tipos_pagamento)
|
||
|
|
|
||
|
|
@pagamento_bp.route("/adicionar", methods=["POST"])
|
||
|
|
@login_required
|
||
|
|
@require_permission('gerenciar_pagamentos')
|
||
|
|
def adicionar():
|
||
|
|
"""Adiciona um novo pagamento (via AJAX)"""
|
||
|
|
militante_id = request.form.get("militante_id")
|
||
|
|
tipo_pagamento = request.form.get("tipo_pagamento")
|
||
|
|
valor = float(request.form.get("valor"))
|
||
|
|
data_pagamento = converter_data(request.form.get("data_pagamento"))
|
||
|
|
|
||
|
|
if PagamentoService.criar_pagamento_simples(militante_id, tipo_pagamento, valor, data_pagamento):
|
||
|
|
return jsonify({
|
||
|
|
'status': 'success',
|
||
|
|
'message': 'Pagamento adicionado com sucesso!'
|
||
|
|
})
|
||
|
|
else:
|
||
|
|
return jsonify({
|
||
|
|
'status': 'error',
|
||
|
|
'message': 'Erro ao adicionar pagamento'
|
||
|
|
}), 400
|
||
|
|
|
||
|
|
@pagamento_bp.route('/editar/<int:id>', methods=['GET', 'POST'])
|
||
|
|
@login_required
|
||
|
|
@require_permission('gerenciar_pagamentos')
|
||
|
|
def editar(id):
|
||
|
|
"""Edita um pagamento existente"""
|
||
|
|
pagamento = PagamentoService.buscar_pagamento(id)
|
||
|
|
if not pagamento:
|
||
|
|
flash('Pagamento não encontrado', 'danger')
|
||
|
|
return redirect(url_for('pagamento.listar'))
|
||
|
|
|
||
|
|
if request.method == 'POST':
|
||
|
|
militante_id = int(request.form['militante_id'])
|
||
|
|
tipo_pagamento_id = int(request.form['tipo_pagamento_id'])
|
||
|
|
valor = float(request.form['valor'])
|
||
|
|
data_pagamento = converter_data(request.form['data_pagamento'])
|
||
|
|
|
||
|
|
if PagamentoService.atualizar_pagamento(id, militante_id, tipo_pagamento_id, valor, data_pagamento):
|
||
|
|
flash('Pagamento atualizado com sucesso!', 'success')
|
||
|
|
return redirect(url_for('pagamento.listar'))
|
||
|
|
else:
|
||
|
|
flash('Erro ao atualizar pagamento', 'danger')
|
||
|
|
return redirect(url_for('pagamento.editar', id=id))
|
||
|
|
|
||
|
|
militantes = MilitanteService.listar_militantes()
|
||
|
|
tipos_pagamento = TipoPagamentoService.listar_tipos_pagamento()
|
||
|
|
return render_template('editar_pagamento.html',
|
||
|
|
pagamento=pagamento,
|
||
|
|
militantes=militantes,
|
||
|
|
tipos_pagamento=tipos_pagamento)
|
||
|
|
|
||
|
|
@pagamento_bp.route('/excluir/<int:id>', methods=['POST'])
|
||
|
|
@login_required
|
||
|
|
@require_permission('gerenciar_pagamentos')
|
||
|
|
def excluir(id):
|
||
|
|
"""Exclui um pagamento existente"""
|
||
|
|
if PagamentoService.excluir_pagamento(id):
|
||
|
|
flash('Pagamento excluído com sucesso!', 'success')
|
||
|
|
else:
|
||
|
|
flash('Erro ao excluir pagamento', 'danger')
|
||
|
|
|
||
|
|
return redirect(url_for('pagamento.listar'))
|