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()