from flask import Blueprint, render_template, redirect, url_for, request, jsonify, flash from flask_login import login_required from datetime import date from services.relatorio_service import RelatorioService from services.setor_service import SetorService from services.comite_service import ComiteService from functions.decorators import require_permission from utils.date_utils import validar_data, converter_data relatorio_bp = Blueprint('relatorio', __name__, url_prefix='/relatorios') # Rotas para relatórios de cotas @relatorio_bp.route("/cotas") @login_required @require_permission('visualizar_relatorios') def listar_cotas(): """Lista todos os relatórios de cotas""" relatorios = RelatorioService.listar_relatorios_cotas() return render_template("listar_relatorios_cotas.html", relatorios=relatorios) @relatorio_bp.route("/cotas/novo", methods=["GET", "POST"]) @login_required @require_permission('gerar_relatorios') def novo_relatorio_cotas(): """Cria um novo relatório de cotas""" if request.method == "POST": setor_id = request.form.get("setor_id") comite_id = request.form.get("comite_id") total_cotas = float(request.form.get("total_cotas")) data_relatorio = request.form.get("data_relatorio") # Validar data if not validar_data(data_relatorio): flash('Data do relatório inválida', 'danger') return render_template("novo_relatorio_cotas.html") # Converter data data_relatorio = converter_data(data_relatorio) # Validar data futura if data_relatorio > date.today(): flash('A data do relatório não pode ser futura', 'danger') return render_template("novo_relatorio_cotas.html") if RelatorioService.criar_relatorio_cotas(setor_id, comite_id, total_cotas, data_relatorio): flash('Relatório de cotas cadastrado com sucesso!', 'success') return redirect(url_for('relatorio.listar_cotas')) else: flash('Erro ao cadastrar relatório de cotas', 'danger') return render_template("novo_relatorio_cotas.html") # GET setores = SetorService.listar_setores() comites = ComiteService.listar_comites() return render_template("novo_relatorio_cotas.html", setores=setores, comites=comites, hoje=date.today().strftime('%Y-%m-%d')) @relatorio_bp.route('/cotas/editar/', methods=['GET', 'POST']) @login_required @require_permission('gerar_relatorios') def editar_relatorio_cotas(id): """Edita um relatório de cotas existente""" relatorio = RelatorioService.buscar_relatorio_cotas(id) if not relatorio: flash('Relatório não encontrado', 'danger') return redirect(url_for('relatorio.listar_cotas')) if request.method == 'POST': setor_id = int(request.form['setor_id']) if request.form['setor_id'] else None comite_id = int(request.form['comite_id']) if request.form['comite_id'] else None total_cotas = float(request.form['total_cotas']) data_relatorio = converter_data(request.form['data_relatorio']) if RelatorioService.atualizar_relatorio_cotas(id, setor_id, comite_id, total_cotas, data_relatorio): flash('Relatório atualizado com sucesso!', 'success') return redirect(url_for('relatorio.listar_cotas')) else: flash('Erro ao atualizar relatório', 'danger') return redirect(url_for('relatorio.editar_relatorio_cotas', id=id)) setores = SetorService.listar_setores() comites = ComiteService.listar_comites() return render_template('editar_relatorio_cotas.html', relatorio=relatorio, setores=setores, comites=comites) @relatorio_bp.route('/cotas/excluir/', methods=['POST']) @login_required @require_permission('gerar_relatorios') def excluir_relatorio_cotas(id): """Exclui um relatório de cotas existente""" if RelatorioService.excluir_relatorio_cotas(id): flash('Relatório excluído com sucesso!', 'success') else: flash('Erro ao excluir relatório', 'danger') return redirect(url_for('relatorio.listar_cotas')) # Rotas para relatórios de vendas @relatorio_bp.route("/vendas") @login_required @require_permission('visualizar_relatorios') def listar_vendas(): """Lista todos os relatórios de vendas""" relatorios = RelatorioService.listar_relatorios_vendas() return render_template("listar_relatorios_vendas.html", relatorios=relatorios) @relatorio_bp.route("/vendas/novo", methods=["GET", "POST"]) @login_required @require_permission('gerar_relatorios') def novo_relatorio_vendas(): """Cria um novo relatório de vendas""" if request.method == "POST": setor_id = request.form.get("setor_id") comite_id = request.form.get("comite_id") total_vendas = float(request.form.get("total_vendas")) data_relatorio = request.form.get("data_relatorio") # Validar data if not validar_data(data_relatorio): flash('Data do relatório inválida', 'danger') return render_template("novo_relatorio_vendas.html") # Converter data data_relatorio = converter_data(data_relatorio) # Validar data futura if data_relatorio > date.today(): flash('A data do relatório não pode ser futura', 'danger') return render_template("novo_relatorio_vendas.html") if RelatorioService.criar_relatorio_vendas(setor_id, comite_id, total_vendas, data_relatorio): flash('Relatório de vendas cadastrado com sucesso!', 'success') return redirect(url_for('relatorio.listar_vendas')) else: flash('Erro ao cadastrar relatório de vendas', 'danger') return render_template("novo_relatorio_vendas.html") # GET setores = SetorService.listar_setores() comites = ComiteService.listar_comites() return render_template("novo_relatorio_vendas.html", setores=setores, comites=comites, hoje=date.today().strftime('%Y-%m-%d'))