fmatituy/selectospromanager
0
1from core.logger import logger
2from core.events import event_bus
3
4class ModuleRegistry:
5 """
6 Service Locator for Selectos modules.
7 Auto-registers all ERP features (sst, proyectos, etc.).
8 """
9 def __init__(self):
10 self._modules = {}
11 self.logger = logger
12 self.event_bus = event_bus
13
14 def register(self, module_name: str, register_func: callable):
15 """
16 Registers a module into the registry to be accessible anywhere.
17 """
18 self._modules[module_name] = register_func
19 self.logger.info(f"MÓDULO REGISTRADO: {module_name}")
20
21 def load_all(self, static_path: str):
22 """
23 Automated load of ERP routes and subsystems.
24 """
25 self.logger.info("CARGANDO KERNEL DEL ERP...")
26
27 # 1. Registro de Módulos Base (Refactores iniciales)
28 try:
29 from modules.auth_pages import register_auth_pages
30 from modules.api_endpoints import register_api_endpoints
31 from modules.pages.home import register_home_pages
32 from modules.pages.dashboards import register_dashboard_pages
33 from services.notifications import NotificationService # CAPA 4
34
35 # Inicializar servicios de infraestructura
36 self.notifier = NotificationService()
37
38 register_auth_pages()
39 register_api_endpoints(static_path)
40 register_home_pages()
41 register_dashboard_pages()
42
43 self.logger.info("Rutas core del sistema instaladas.")
44 except Exception as e:
45 print(f"!!! CRITICAL REGISTRY ERROR: {e}")
46 self.logger.error(f"Falla en registro core: {str(e)}")
47
48 # 2. Carga dinámica de sub-módulos legados (Import-based)
49 # Aquí agrupamos los imports actuales para centralizar responsabilidades
50 try:
51
52 # --- Módulo SST (Agrupado en el futuro en sub-dominio) ---
53 import pkgutil
54 import importlib
55 import modules.sst
56
57 for _, module_name, _ in pkgutil.iter_modules(modules.sst.__path__):
58 try:
59 importlib.import_module(f"modules.sst.{module_name}")
60 self.logger.debug(f"Página/Módulo SST cargado: {module_name}")
61 except Exception as mod_err:
62 self.logger.error(f"Fallo al cargar página/módulo SST ({module_name}): {mod_err}")
63
64 # --- Módulo Personal (NUEVO) ---
65 import modules.personal
66 self.logger.info(f"Cargando submódulos de Personal desde: {modules.personal.__path__}")
67 for _, module_name, _ in pkgutil.iter_modules(modules.personal.__path__):
68 try:
69 importlib.import_module(f"modules.personal.{module_name}")
70 self.logger.info(f"Página Personal cargada: {module_name}")
71 except Exception as mod_err:
72 self.logger.error(f"Fallo al cargar página personal ({module_name}): {mod_err}")
73
74 # --- Módulo Proyectos ---
75 import modules.proyectos
76 for _, module_name, _ in pkgutil.iter_modules(modules.proyectos.__path__):
77 try:
78 importlib.import_module(f"modules.proyectos.{module_name}")
79 self.logger.debug(f"Submódulo Proyectos cargado: {module_name}")
80 except Exception as mod_err:
81 self.logger.error(f"Fallo al cargar submódulo proyectos ({module_name}): {mod_err}")
82
83 # Registrar páginas de proyectos (Páginas principales)
84 try:
85 from modules.pages.proyectos import register_proyectos_pages
86 register_proyectos_pages()
87 except Exception as e:
88 self.logger.error(f"Error cargando páginas de proyectos: {e}")
89
90 # --- Módulo Inventario ---
91 import modules.inventario
92 for _, module_name, _ in pkgutil.iter_modules(modules.inventario.__path__):
93 try:
94 importlib.import_module(f"modules.inventario.{module_name}")
95 self.logger.debug(f"Submódulo Inventario cargado: {module_name}")
96 except Exception as mod_err:
97 self.logger.error(f"Fallo al cargar submódulo inventario ({module_name}): {mod_err}")
98
99 # Registrar páginas de inventario (Páginas principales)
100 try:
101 from modules.pages.inventario import register_inventario_pages
102 register_inventario_pages()
103 except Exception as e:
104 self.logger.error(f"Error cargando páginas de inventario: {e}")
105
106 # --- Módulo CRM Corporativo (NUEVO) ---
107 import modules.crm
108 for _, module_name, _ in pkgutil.iter_modules(modules.crm.__path__):
109 try:
110 importlib.import_module(f"modules.crm.{module_name}")
111 self.logger.info(f"Submódulo CRM Corporativo cargado: {module_name}")
112 except Exception as mod_err:
113 self.logger.error(f"Fallo al cargar submódulo CRM ({module_name}): {mod_err}")
114
115 self.logger.info("Ecosistema de módulos (SST, Personal, Proyectos, Inventario, CRM) sincronizado.")
116 except Exception as e:
117 self.logger.error(f"Error cargando módulos secundarios: {str(e)}")
118
119# Instancia Global
120registry = ModuleRegistry()
121
122def register_all_routes(static_path):
123 registry.load_all(static_path)
124 