import os import django import sys # Set up Django environment sys.path.append(os.path.dirname(os.path.abspath(__file__))) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') django.setup() from expenses.models import Project def run_seed(): print("Clearing existing projects to ensure clean portfolio seeding...") # This might cascade to expenses, which is expected for seeding a clean MVP/dev environment Project.objects.all().delete() print("Seeding Root Cost Centers, Portfolios and Projects...") # 1. Create Root Cost Centers (Level 1) cc_idi = Project.objects.create( code="CC-IDI", name="Centro de Costo I+D+i", description="Centro de costo principal para Investigación, Desarrollo e Innovación tecnológica.", assigned_budget_clp=350000000.00, parent=None ) cc_adf = Project.objects.create( code="CC-ADF", name="Centro de Costo Administración y Finanzas", description="Centro de costo corporativo para Administración, Finanzas y Overhead general.", assigned_budget_clp=150000000.00, parent=None ) print(f"Created Root Cost Center: {cc_idi.code} - {cc_idi.name}") print(f"Created Root Cost Center: {cc_adf.code} - {cc_adf.name}") # 2. Portfolio definitions (Level 2) - under CC-IDI portfolio_def = { "Portafolio 1": 5, "Portafolio 2": 4, "Portafolio 3": 3, "Portafolio 4": 1, "Portafolio 5": 1, "Portafolio 6": 1, "Portafolio 7": 2, } for index, (port_name, num_projects) in enumerate(portfolio_def.items(), 1): port_code = f"PORT-{index:03d}" # Create portfolio under CC-IDI portfolio = Project.objects.create( code=port_code, name=port_name, description=f"Portafolio tecnológico para agrupar {num_projects} proyectos.", assigned_budget_clp=50000000.00, parent=cc_idi ) print(f" Created Portfolio: {portfolio.code} - {portfolio.name} (under CC-IDI)") # Create subprojects (Level 3) for sub_idx in range(1, num_projects + 1): sub_code = f"PRY-{index}{sub_idx:02d}" subproject = Project.objects.create( code=sub_code, name=f"Proyecto {sub_idx} ({port_name})", description=f"Subproyecto contable imputable de {port_name}.", assigned_budget_clp=10000000.00, parent=portfolio ) print(f" Created Project: {subproject.code} - {subproject.name}") # 3. Create Portfolios and Projects under CC-ADF port_adm = Project.objects.create( code="PORT-008", name="Operaciones y Finanzas", description="Portafolio administrativo para gastos fijos, soporte y legal.", assigned_budget_clp=80000000.00, parent=cc_adf ) print(f" Created Portfolio: {port_adm.code} - {port_adm.name} (under CC-ADF)") pry_adm = Project.objects.create( code="PRY-801", name="Sueldos y Overhead Administrativo", description="Gasto operacional fijo de oficina, contabilidad y sueldos staff core.", assigned_budget_clp=40000000.00, parent=port_adm ) pry_fin = Project.objects.create( code="PRY-802", name="Servicios Financieros y Legal", description="Gastos de auditoría externa, patentes y asesoría legal B2B.", assigned_budget_clp=40000000.00, parent=port_adm ) print(f" Created Project: {pry_adm.code} - {pry_adm.name}") print(f" Created Project: {pry_fin.code} - {pry_fin.name}") print("✅ Root Cost Centers, Portfolios and Projects seeding completed successfully.") if __name__ == "__main__": run_seed()