feat: Melhorias no Dashboard
- Interface: - Adicionada saudação personalizada com nome do usuário - Melhorado formato da data em português - Ajustado layout do header com gradiente e sombra - Corrigida categoria de mensagens flash de 'error' para 'danger' - Card de Cotas: - Reorganizado layout para melhor exibição de valores grandes - Ajustado tamanho da fonte usando calc(1.2rem + 0.8vw) - Adicionado container específico para valor com min-width: 0 - Redimensionado e reposicionado ícone - Melhorado espaçamento e alinhamento - Lista de Militantes: - Ajustada query para ordenar por ID - Removida dependência da coluna created_at - Adicionado ID do militante na listagem - Estilos: - Adicionadas classes valor-container e icon-container - Melhorado responsividade dos valores monetários - Ajustado gradiente no header de boas-vindas - Refinado espaçamento e margens dos componentes
This commit is contained in:
126
seed_data.py
126
seed_data.py
@@ -2,7 +2,8 @@ from datetime import datetime, timedelta
|
||||
from functions.database import (
|
||||
Base, Militante, CotaMensal, TipoPagamento, Pagamento,
|
||||
MaterialVendido, TipoMaterial, VendaJornalAvulso, AssinaturaAnual,
|
||||
RelatorioCotasMensais, RelatorioVendasMateriais, engine, get_db_connection
|
||||
RelatorioCotasMensais, RelatorioVendasMateriais, engine, get_db_connection,
|
||||
Setor, ComiteCentral, Usuario, Role
|
||||
)
|
||||
import random
|
||||
from faker import Faker
|
||||
@@ -38,26 +39,47 @@ def criar_tipos_material():
|
||||
db_session.add(TipoMaterial(descricao=tipo))
|
||||
db_session.commit()
|
||||
|
||||
def criar_militantes(quantidade=50):
|
||||
"""Cria militantes fictícios"""
|
||||
def criar_militantes(num_militantes):
|
||||
print(f"\nCriando {num_militantes} militantes...")
|
||||
militantes = []
|
||||
for _ in range(quantidade):
|
||||
emails_usados = set() # Conjunto para rastrear emails já usados
|
||||
|
||||
for i in range(num_militantes):
|
||||
nome = fake.name()
|
||||
cpf = fake.cpf()
|
||||
|
||||
# Gerar email único
|
||||
while True:
|
||||
email = fake.email()
|
||||
if email not in emails_usados:
|
||||
emails_usados.add(email)
|
||||
break
|
||||
|
||||
telefone = fake.phone_number()
|
||||
endereco = fake.address()
|
||||
filiado = fake.boolean()
|
||||
|
||||
print(f"Criando militante {i+1}: {nome} (CPF: {cpf})")
|
||||
|
||||
militante = Militante(
|
||||
nome=fake.name(),
|
||||
cpf=fake.cpf(),
|
||||
email=fake.email(),
|
||||
telefone=fake.phone_number(),
|
||||
endereco=fake.address(),
|
||||
filiado=random.choice([True, False])
|
||||
nome=nome,
|
||||
cpf=cpf,
|
||||
email=email,
|
||||
telefone=telefone,
|
||||
endereco=endereco,
|
||||
filiado=filiado
|
||||
)
|
||||
db_session.add(militante)
|
||||
militantes.append(militante)
|
||||
|
||||
db_session.add_all(militantes)
|
||||
db_session.commit()
|
||||
return militantes
|
||||
|
||||
def criar_cotas(militantes, quantidade_por_militante=3):
|
||||
"""Cria cotas mensais fictícias"""
|
||||
print(f"Criando {quantidade_por_militante} cotas para cada um dos {len(militantes)} militantes...")
|
||||
for militante in militantes:
|
||||
print(f"Criando cotas para militante {militante.nome}")
|
||||
for i in range(quantidade_por_militante):
|
||||
data_base = datetime.now() - timedelta(days=30 * i)
|
||||
valor = random.uniform(50, 200)
|
||||
@@ -70,7 +92,9 @@ def criar_cotas(militantes, quantidade_por_militante=3):
|
||||
pago=random.choice([True, False])
|
||||
)
|
||||
db_session.add(cota)
|
||||
print(f" Cota criada: valor={valor:.2f}, vencimento={data_base + timedelta(days=30)}")
|
||||
db_session.commit()
|
||||
print("Cotas criadas com sucesso!")
|
||||
|
||||
def criar_pagamentos(militantes):
|
||||
"""Cria pagamentos fictícios"""
|
||||
@@ -155,38 +179,82 @@ def criar_relatorios():
|
||||
|
||||
db_session.commit()
|
||||
|
||||
def criar_setores():
|
||||
"""Cria setores padrão"""
|
||||
setores = [
|
||||
"Setor 1",
|
||||
"Setor 2",
|
||||
"Setor 3",
|
||||
"Setor 4",
|
||||
"Setor 5"
|
||||
]
|
||||
for setor in setores:
|
||||
if not db_session.query(Setor).filter_by(nome=setor).first():
|
||||
db_session.add(Setor(nome=setor))
|
||||
db_session.commit()
|
||||
|
||||
def criar_comites():
|
||||
"""Cria comitês padrão"""
|
||||
comites = [
|
||||
"Comitê 1",
|
||||
"Comitê 2",
|
||||
"Comitê 3"
|
||||
]
|
||||
for comite in comites:
|
||||
if not db_session.query(ComiteCentral).filter_by(nome=comite).first():
|
||||
db_session.add(ComiteCentral(nome=comite))
|
||||
db_session.commit()
|
||||
|
||||
def criar_roles():
|
||||
"""Cria roles padrão"""
|
||||
roles = [
|
||||
("admin", 1), # Nível 1: Administrador
|
||||
("gestor", 2), # Nível 2: Gestor
|
||||
("usuario", 3) # Nível 3: Usuário comum
|
||||
]
|
||||
for nome, nivel in roles:
|
||||
if not db_session.query(Role).filter_by(nome=nome).first():
|
||||
db_session.add(Role(nome=nome, nivel=nivel))
|
||||
db_session.commit()
|
||||
|
||||
def criar_usuario_admin():
|
||||
"""Cria usuário admin inicial"""
|
||||
if not db_session.query(Usuario).filter_by(username='admin').first():
|
||||
role_admin = db_session.query(Role).filter_by(nome='admin').first()
|
||||
setor = db_session.query(Setor).first()
|
||||
|
||||
admin = Usuario(
|
||||
username='admin',
|
||||
email='admin@example.com',
|
||||
is_admin=True,
|
||||
ativo=True,
|
||||
role_id=role_admin.id if role_admin else None,
|
||||
setor_id=setor.id if setor else None
|
||||
)
|
||||
admin.set_password('admin123') # Método que deve existir na classe Usuario
|
||||
db_session.add(admin)
|
||||
db_session.commit()
|
||||
print("Usuário admin criado com sucesso!")
|
||||
|
||||
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("Populando banco de dados com dados fictícios...")
|
||||
|
||||
print("Criando tipos de pagamento...")
|
||||
criar_tipos_pagamento()
|
||||
|
||||
print("Criando tipos de material...")
|
||||
criar_tipos_material()
|
||||
criar_setores()
|
||||
criar_comites()
|
||||
criar_roles()
|
||||
|
||||
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!")
|
||||
print("Dados fictícios criados com sucesso!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
seed_database()
|
||||
Reference in New Issue
Block a user