149 lines
6.2 KiB
Python
149 lines
6.2 KiB
Python
|
|
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/<int:id>', 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/<int:id>', 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'))
|