feat: adiciona script de dados fictícios e padroniza tratamento de erros
This commit is contained in:
59
app.py
59
app.py
@@ -525,22 +525,13 @@ def novo_pagamento():
|
|||||||
@app.route("/pagamentos")
|
@app.route("/pagamentos")
|
||||||
@require_login
|
@require_login
|
||||||
def listar_pagamentos():
|
def listar_pagamentos():
|
||||||
user = current_user
|
try:
|
||||||
|
pagamentos = db_session.query(Pagamento).order_by(Pagamento.data_pagamento.desc()).all()
|
||||||
# Filtrar pagamentos baseado na instância do usuário
|
|
||||||
if user.has_permission(Permission.REGISTER_CC_PAYMENT):
|
|
||||||
pagamentos = db_session.query(Pagamento).all()
|
|
||||||
elif user.has_permission(Permission.REGISTER_CR_PAYMENT):
|
|
||||||
pagamentos = db_session.query(Pagamento).filter(Pagamento.instancia_id.in_(user.get_cr_instances())).all()
|
|
||||||
elif user.has_permission(Permission.REGISTER_SECTOR_PAYMENT):
|
|
||||||
pagamentos = db_session.query(Pagamento).filter(Pagamento.instancia_id.in_(user.get_sector_instances())).all()
|
|
||||||
elif user.has_permission(Permission.REGISTER_CELL_PAYMENT):
|
|
||||||
pagamentos = db_session.query(Pagamento).filter(Pagamento.instancia_id.in_(user.get_cell_instances())).all()
|
|
||||||
else:
|
|
||||||
flash('Você não tem permissão para visualizar pagamentos.', 'error')
|
|
||||||
return redirect(url_for('home'))
|
|
||||||
|
|
||||||
return render_template("listar_pagamentos.html", pagamentos=pagamentos)
|
return render_template("listar_pagamentos.html", pagamentos=pagamentos)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar pagamentos: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de pagamentos. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_pagamentos.html", pagamentos=[])
|
||||||
|
|
||||||
# Rota para criar um novo material vendido
|
# Rota para criar um novo material vendido
|
||||||
@app.route("/materiais/novo", methods=["GET", "POST"])
|
@app.route("/materiais/novo", methods=["GET", "POST"])
|
||||||
@@ -573,9 +564,13 @@ def novo_material():
|
|||||||
@require_login
|
@require_login
|
||||||
@require_permission(Permission.VIEW_CELL_REPORTS)
|
@require_permission(Permission.VIEW_CELL_REPORTS)
|
||||||
def listar_materiais():
|
def listar_materiais():
|
||||||
"""Lista todos os materiais"""
|
try:
|
||||||
materiais = db_session.query(MaterialVendido).all()
|
materiais = db_session.query(MaterialVendido).order_by(MaterialVendido.data_venda.desc()).all()
|
||||||
return render_template("listar_materiais.html", materiais=materiais)
|
return render_template("listar_materiais.html", materiais=materiais)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar materiais: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de materiais. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_materiais.html", materiais=[])
|
||||||
|
|
||||||
# Rota para criar uma nova venda de jornais avulsos
|
# Rota para criar uma nova venda de jornais avulsos
|
||||||
@app.route("/jornais/novo", methods=["GET", "POST"])
|
@app.route("/jornais/novo", methods=["GET", "POST"])
|
||||||
@@ -607,9 +602,13 @@ def nova_venda_jornal():
|
|||||||
@require_login
|
@require_login
|
||||||
@require_permission(Permission.VIEW_CELL_REPORTS)
|
@require_permission(Permission.VIEW_CELL_REPORTS)
|
||||||
def listar_vendas_jornal():
|
def listar_vendas_jornal():
|
||||||
"""Lista todas as vendas de jornal"""
|
try:
|
||||||
vendas = db_session.query(VendaJornalAvulso).all()
|
vendas = db_session.query(VendaJornalAvulso).order_by(VendaJornalAvulso.data_venda.desc()).all()
|
||||||
return render_template("listar_vendas_jornal.html", vendas=vendas)
|
return render_template("listar_vendas_jornal.html", vendas=vendas)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar vendas de jornais: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de vendas de jornais. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_vendas_jornal.html", vendas=[])
|
||||||
|
|
||||||
# Rota para criar uma nova assinatura anual
|
# Rota para criar uma nova assinatura anual
|
||||||
@app.route("/assinaturas/novo", methods=["GET", "POST"])
|
@app.route("/assinaturas/novo", methods=["GET", "POST"])
|
||||||
@@ -643,9 +642,13 @@ def nova_assinatura():
|
|||||||
@require_login
|
@require_login
|
||||||
@require_permission(Permission.VIEW_CELL_REPORTS)
|
@require_permission(Permission.VIEW_CELL_REPORTS)
|
||||||
def listar_assinaturas():
|
def listar_assinaturas():
|
||||||
"""Lista todas as assinaturas"""
|
try:
|
||||||
assinaturas = db_session.query(AssinaturaAnual).all()
|
assinaturas = db_session.query(AssinaturaAnual).order_by(AssinaturaAnual.data_inicio.desc()).all()
|
||||||
return render_template("listar_assinaturas.html", assinaturas=assinaturas)
|
return render_template("listar_assinaturas.html", assinaturas=assinaturas)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar assinaturas: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de assinaturas. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_assinaturas.html", assinaturas=[])
|
||||||
|
|
||||||
# Rota para criar um novo relatório de cotas mensais
|
# Rota para criar um novo relatório de cotas mensais
|
||||||
@app.route("/relatorios/cotas/novo", methods=["GET", "POST"])
|
@app.route("/relatorios/cotas/novo", methods=["GET", "POST"])
|
||||||
@@ -677,8 +680,13 @@ def novo_relatorio_cotas():
|
|||||||
@require_login
|
@require_login
|
||||||
@require_permission(Permission.VIEW_CELL_REPORTS)
|
@require_permission(Permission.VIEW_CELL_REPORTS)
|
||||||
def listar_relatorios_cotas():
|
def listar_relatorios_cotas():
|
||||||
relatorios = db_session.query(RelatorioCotasMensais).all()
|
try:
|
||||||
|
relatorios = db_session.query(RelatorioCotasMensais).order_by(RelatorioCotasMensais.data_relatorio.desc()).all()
|
||||||
return render_template("listar_relatorios_cotas.html", relatorios=relatorios)
|
return render_template("listar_relatorios_cotas.html", relatorios=relatorios)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar relatórios de cotas: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de relatórios de cotas. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_relatorios_cotas.html", relatorios=[])
|
||||||
|
|
||||||
# Rota para criar um novo relatório de vendas de materiais
|
# Rota para criar um novo relatório de vendas de materiais
|
||||||
@app.route("/relatorios/vendas/novo", methods=["GET", "POST"])
|
@app.route("/relatorios/vendas/novo", methods=["GET", "POST"])
|
||||||
@@ -710,8 +718,13 @@ def novo_relatorio_vendas():
|
|||||||
@require_login
|
@require_login
|
||||||
@require_permission(Permission.VIEW_CELL_REPORTS)
|
@require_permission(Permission.VIEW_CELL_REPORTS)
|
||||||
def listar_relatorios_vendas():
|
def listar_relatorios_vendas():
|
||||||
relatorios = db_session.query(RelatorioVendasMateriais).all()
|
try:
|
||||||
|
relatorios = db_session.query(RelatorioVendasMateriais).order_by(RelatorioVendasMateriais.data_relatorio.desc()).all()
|
||||||
return render_template("listar_relatorios_vendas.html", relatorios=relatorios)
|
return render_template("listar_relatorios_vendas.html", relatorios=relatorios)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erro ao listar relatórios de vendas: {str(e)}")
|
||||||
|
flash("Erro ao carregar lista de relatórios de vendas. Por favor, tente novamente.", "danger")
|
||||||
|
return render_template("listar_relatorios_vendas.html", relatorios=[])
|
||||||
|
|
||||||
@app.route('/militantes/<int:id>/editar', methods=['GET', 'POST'])
|
@app.route('/militantes/<int:id>/editar', methods=['GET', 'POST'])
|
||||||
@require_login
|
@require_login
|
||||||
|
|||||||
192
seed_data.py
Normal file
192
seed_data.py
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
from datetime import datetime, timedelta
|
||||||
|
from functions.database import (
|
||||||
|
Base, Militante, CotaMensal, TipoPagamento, Pagamento,
|
||||||
|
MaterialVendido, TipoMaterial, VendaJornalAvulso, AssinaturaAnual,
|
||||||
|
RelatorioCotasMensais, RelatorioVendasMateriais, engine, get_db_connection
|
||||||
|
)
|
||||||
|
import random
|
||||||
|
from faker import Faker
|
||||||
|
|
||||||
|
fake = Faker('pt_BR')
|
||||||
|
db_session = get_db_connection()
|
||||||
|
|
||||||
|
def criar_tipos_pagamento():
|
||||||
|
"""Cria tipos de pagamento padrão"""
|
||||||
|
tipos = [
|
||||||
|
"Dinheiro",
|
||||||
|
"PIX",
|
||||||
|
"Cartão de Crédito",
|
||||||
|
"Cartão de Débito",
|
||||||
|
"Transferência Bancária"
|
||||||
|
]
|
||||||
|
for tipo in tipos:
|
||||||
|
if not db_session.query(TipoPagamento).filter_by(descricao=tipo).first():
|
||||||
|
db_session.add(TipoPagamento(descricao=tipo))
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_tipos_material():
|
||||||
|
"""Cria tipos de material padrão"""
|
||||||
|
tipos = [
|
||||||
|
"Jornal",
|
||||||
|
"Revista",
|
||||||
|
"Livro",
|
||||||
|
"Panfleto",
|
||||||
|
"Cartilha"
|
||||||
|
]
|
||||||
|
for tipo in tipos:
|
||||||
|
if not db_session.query(TipoMaterial).filter_by(descricao=tipo).first():
|
||||||
|
db_session.add(TipoMaterial(descricao=tipo))
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_militantes(quantidade=50):
|
||||||
|
"""Cria militantes fictícios"""
|
||||||
|
militantes = []
|
||||||
|
for _ in range(quantidade):
|
||||||
|
militante = Militante(
|
||||||
|
nome=fake.name(),
|
||||||
|
cpf=fake.cpf(),
|
||||||
|
email=fake.email(),
|
||||||
|
telefone=fake.phone_number(),
|
||||||
|
endereco=fake.address(),
|
||||||
|
filiado=random.choice([True, False])
|
||||||
|
)
|
||||||
|
db_session.add(militante)
|
||||||
|
militantes.append(militante)
|
||||||
|
db_session.commit()
|
||||||
|
return militantes
|
||||||
|
|
||||||
|
def criar_cotas(militantes, quantidade_por_militante=3):
|
||||||
|
"""Cria cotas mensais fictícias"""
|
||||||
|
for militante in militantes:
|
||||||
|
for i in range(quantidade_por_militante):
|
||||||
|
data_base = datetime.now() - timedelta(days=30 * i)
|
||||||
|
valor = random.uniform(50, 200)
|
||||||
|
cota = CotaMensal(
|
||||||
|
militante_id=militante.id,
|
||||||
|
valor_antigo=valor,
|
||||||
|
valor_novo=valor * 1.1,
|
||||||
|
data_alteracao=data_base,
|
||||||
|
data_vencimento=data_base + timedelta(days=30),
|
||||||
|
pago=random.choice([True, False])
|
||||||
|
)
|
||||||
|
db_session.add(cota)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_pagamentos(militantes):
|
||||||
|
"""Cria pagamentos fictícios"""
|
||||||
|
tipos_pagamento = db_session.query(TipoPagamento).all()
|
||||||
|
for militante in militantes:
|
||||||
|
for _ in range(random.randint(1, 5)):
|
||||||
|
pagamento = Pagamento(
|
||||||
|
militante_id=militante.id,
|
||||||
|
tipo_pagamento_id=random.choice(tipos_pagamento).id,
|
||||||
|
valor=random.uniform(50, 500),
|
||||||
|
data_pagamento=fake.date_time_between(start_date='-1y', end_date='now')
|
||||||
|
)
|
||||||
|
db_session.add(pagamento)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_materiais_vendidos(militantes):
|
||||||
|
"""Cria materiais vendidos fictícios"""
|
||||||
|
tipos_material = db_session.query(TipoMaterial).all()
|
||||||
|
for militante in militantes:
|
||||||
|
for _ in range(random.randint(1, 3)):
|
||||||
|
material = MaterialVendido(
|
||||||
|
militante_id=militante.id,
|
||||||
|
tipo_material_id=random.choice(tipos_material).id,
|
||||||
|
descricao=fake.sentence(),
|
||||||
|
valor=random.uniform(20, 100),
|
||||||
|
data_venda=fake.date_time_between(start_date='-1y', end_date='now')
|
||||||
|
)
|
||||||
|
db_session.add(material)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_vendas_jornal(militantes):
|
||||||
|
"""Cria vendas de jornal avulso fictícias"""
|
||||||
|
for militante in militantes:
|
||||||
|
for _ in range(random.randint(1, 4)):
|
||||||
|
venda = VendaJornalAvulso(
|
||||||
|
militante_id=militante.id,
|
||||||
|
quantidade=random.randint(1, 10),
|
||||||
|
valor_total=random.uniform(10, 100),
|
||||||
|
data_venda=fake.date_time_between(start_date='-1y', end_date='now')
|
||||||
|
)
|
||||||
|
db_session.add(venda)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_assinaturas(militantes):
|
||||||
|
"""Cria assinaturas anuais fictícias"""
|
||||||
|
tipos_material = db_session.query(TipoMaterial).all()
|
||||||
|
for militante in militantes:
|
||||||
|
if random.random() < 0.3: # 30% de chance de ter assinatura
|
||||||
|
data_inicio = fake.date_time_between(start_date='-1y', end_date='now')
|
||||||
|
assinatura = AssinaturaAnual(
|
||||||
|
militante_id=militante.id,
|
||||||
|
tipo_material_id=random.choice(tipos_material).id,
|
||||||
|
quantidade=random.randint(1, 3),
|
||||||
|
valor_total=random.uniform(100, 500),
|
||||||
|
data_inicio=data_inicio,
|
||||||
|
data_fim=data_inicio + timedelta(days=365)
|
||||||
|
)
|
||||||
|
db_session.add(assinatura)
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def criar_relatorios():
|
||||||
|
"""Cria relatórios fictícios"""
|
||||||
|
for _ in range(12): # Um relatório por mês do último ano
|
||||||
|
data = fake.date_time_between(start_date='-1y', end_date='now')
|
||||||
|
|
||||||
|
relatorio_cotas = RelatorioCotasMensais(
|
||||||
|
setor_id=random.randint(1, 5),
|
||||||
|
comite_id=random.randint(1, 3),
|
||||||
|
total_cotas=random.uniform(1000, 5000),
|
||||||
|
data_relatorio=data
|
||||||
|
)
|
||||||
|
|
||||||
|
relatorio_vendas = RelatorioVendasMateriais(
|
||||||
|
setor_id=random.randint(1, 5),
|
||||||
|
comite_id=random.randint(1, 3),
|
||||||
|
total_vendas=random.uniform(500, 3000),
|
||||||
|
data_relatorio=data
|
||||||
|
)
|
||||||
|
|
||||||
|
db_session.add(relatorio_cotas)
|
||||||
|
db_session.add(relatorio_vendas)
|
||||||
|
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
def seed_database():
|
||||||
|
"""Função principal para popular o banco de dados com dados fictícios"""
|
||||||
|
print("Iniciando população do banco de dados com dados fictícios...")
|
||||||
|
|
||||||
|
print("Criando tipos de pagamento...")
|
||||||
|
criar_tipos_pagamento()
|
||||||
|
|
||||||
|
print("Criando tipos de material...")
|
||||||
|
criar_tipos_material()
|
||||||
|
|
||||||
|
print("Criando militantes...")
|
||||||
|
militantes = criar_militantes(50)
|
||||||
|
|
||||||
|
print("Criando cotas mensais...")
|
||||||
|
criar_cotas(militantes)
|
||||||
|
|
||||||
|
print("Criando pagamentos...")
|
||||||
|
criar_pagamentos(militantes)
|
||||||
|
|
||||||
|
print("Criando materiais vendidos...")
|
||||||
|
criar_materiais_vendidos(militantes)
|
||||||
|
|
||||||
|
print("Criando vendas de jornal...")
|
||||||
|
criar_vendas_jornal(militantes)
|
||||||
|
|
||||||
|
print("Criando assinaturas...")
|
||||||
|
criar_assinaturas(militantes)
|
||||||
|
|
||||||
|
print("Criando relatórios...")
|
||||||
|
criar_relatorios()
|
||||||
|
|
||||||
|
print("Banco de dados populado com sucesso!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
seed_database()
|
||||||
Reference in New Issue
Block a user