
- Crear script assign_admin_to_lab_group.py - Integrar en proceso de inicialización - Asegurar que admin tenga acceso completo al menú de configuración 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
261 lines
8.6 KiB
Python
261 lines
8.6 KiB
Python
import socket
|
|
import time
|
|
import subprocess
|
|
import sys
|
|
import os
|
|
|
|
# --- Configuración ---
|
|
DB_HOST = os.environ.get("HOST", "db")
|
|
DB_PORT = int(os.environ.get("PORT", 5432))
|
|
ODOO_CONF = "/etc/odoo/odoo.conf"
|
|
DB_NAME = "lims_demo"
|
|
MODULES_TO_INSTALL = "base,sale_management,stock,account,lims_management"
|
|
|
|
# --- Lógica de espera de PostgreSQL ---
|
|
print(f"Esperando a PostgreSQL en {DB_HOST}:{DB_PORT}...")
|
|
sys.stdout.flush()
|
|
|
|
while True:
|
|
try:
|
|
with socket.create_connection((DB_HOST, DB_PORT), timeout=2):
|
|
print("PostgreSQL está listo.")
|
|
sys.stdout.flush()
|
|
break
|
|
except (socket.timeout, ConnectionRefusedError, OSError) as e:
|
|
print(f"PostgreSQL no está listo todavía ({e}), esperando...")
|
|
sys.stdout.flush()
|
|
time.sleep(2)
|
|
|
|
# --- Lógica de inicialización de Odoo ---
|
|
print(f"Creando base de datos '{DB_NAME}' e instalando módulos...")
|
|
sys.stdout.flush()
|
|
|
|
odoo_command = [
|
|
"odoo",
|
|
"-c", ODOO_CONF,
|
|
"-d", DB_NAME,
|
|
"-i", MODULES_TO_INSTALL,
|
|
"--load-language", "es_ES",
|
|
"--stop-after-init"
|
|
]
|
|
|
|
# Usamos subprocess.run para tener mejor control sobre la salida
|
|
try:
|
|
result = subprocess.run(
|
|
odoo_command,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Odoo stdout ---")
|
|
print(result.stdout)
|
|
print("--- Odoo stderr ---")
|
|
print(result.stderr)
|
|
sys.stdout.flush()
|
|
|
|
if result.returncode != 0:
|
|
print(f"Odoo falló con código de salida {result.returncode}")
|
|
sys.exit(result.returncode)
|
|
|
|
print("Inicialización de Odoo completada exitosamente.")
|
|
|
|
# --- Lógica para crear datos de demostración personalizados ---
|
|
print("Creando solicitudes de laboratorio de demostración...")
|
|
sys.stdout.flush()
|
|
|
|
with open("/app/create_lab_requests.py", "r") as f:
|
|
script_content = f.read()
|
|
|
|
# Reutilizamos el entorno de Odoo para ejecutar un script
|
|
create_requests_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{script_content}
|
|
EOF
|
|
"""
|
|
|
|
try:
|
|
result = subprocess.run(
|
|
create_requests_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Create Lab Requests stdout ---")
|
|
print(result.stdout)
|
|
print("--- Create Lab Requests stderr ---")
|
|
print(result.stderr)
|
|
sys.stdout.flush()
|
|
|
|
if result.returncode != 0:
|
|
print(f"Fallo al crear las solicitudes de laboratorio con código de salida {result.returncode}")
|
|
sys.exit(result.returncode)
|
|
|
|
print("Solicitudes de laboratorio de demostración creadas exitosamente.")
|
|
|
|
# --- Crear datos de demostración de pruebas ---
|
|
print("\nCreando datos de demostración de pruebas de laboratorio...")
|
|
sys.stdout.flush()
|
|
|
|
# Usar el nuevo script consolidado de datos demo
|
|
demo_script_path = "/app/test/create_demo_data.py"
|
|
if os.path.exists(demo_script_path):
|
|
with open(demo_script_path, "r") as f:
|
|
demo_script_content = f.read()
|
|
|
|
create_demo_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{demo_script_content}
|
|
EOF
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
create_demo_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Create Demo Data stdout ---")
|
|
print(result.stdout)
|
|
print("--- Create Demo Data stderr ---")
|
|
print(result.stderr)
|
|
sys.stdout.flush()
|
|
|
|
if result.returncode == 0:
|
|
print("Datos de demostración creados exitosamente.")
|
|
else:
|
|
print(f"Advertencia: Fallo al crear datos de demostración (código {result.returncode})")
|
|
else:
|
|
# Fallback al script anterior si existe
|
|
old_script_path = "/app/test/create_test_demo_data.py"
|
|
if os.path.exists(old_script_path):
|
|
print("Usando script de demostración anterior...")
|
|
with open(old_script_path, "r") as f:
|
|
test_script_content = f.read()
|
|
|
|
create_tests_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{test_script_content}
|
|
EOF
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
create_tests_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
if result.returncode == 0:
|
|
print("Datos de demostración de pruebas creados exitosamente.")
|
|
else:
|
|
print(f"Advertencia: Fallo al crear datos de demostración de pruebas (código {result.returncode})")
|
|
|
|
# --- Actualizar logo de la empresa ---
|
|
print("\nActualizando logo de la empresa...")
|
|
sys.stdout.flush()
|
|
|
|
if os.path.exists("/app/scripts/update_company_logo_odoo18.py"):
|
|
with open("/app/scripts/update_company_logo_odoo18.py", "r") as f:
|
|
logo_script_content = f.read()
|
|
|
|
update_logo_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{logo_script_content}
|
|
EOF
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
update_logo_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Update Company Logo stdout ---")
|
|
print(result.stdout)
|
|
print("--- Update Company Logo stderr ---")
|
|
print(result.stderr)
|
|
sys.stdout.flush()
|
|
|
|
if result.returncode == 0:
|
|
print("Logo de empresa actualizado exitosamente.")
|
|
else:
|
|
print(f"Advertencia: Fallo al actualizar logo de empresa (código {result.returncode})")
|
|
|
|
# --- Asignar admin al grupo de Administrador de Laboratorio ---
|
|
print("\nAsignando usuario admin al grupo de Administrador de Laboratorio...")
|
|
sys.stdout.flush()
|
|
|
|
if os.path.exists("/app/scripts/assign_admin_to_lab_group.py"):
|
|
with open("/app/scripts/assign_admin_to_lab_group.py", "r") as f:
|
|
admin_group_script = f.read()
|
|
|
|
assign_admin_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{admin_group_script}
|
|
EOF
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
assign_admin_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Assign Admin to Lab Group stdout ---")
|
|
print(result.stdout)
|
|
print("--- Assign Admin to Lab Group stderr ---")
|
|
print(result.stderr)
|
|
sys.stdout.flush()
|
|
|
|
if result.returncode == 0:
|
|
print("Usuario admin asignado exitosamente al grupo de Administrador de Laboratorio.")
|
|
else:
|
|
print(f"Advertencia: Fallo al asignar admin al grupo (código {result.returncode})")
|
|
|
|
# --- Validación final del logo ---
|
|
print("\nValidando estado final del logo y nombre...")
|
|
sys.stdout.flush()
|
|
|
|
if os.path.exists("/app/test/verify_company_logo.py"):
|
|
with open("/app/test/verify_company_logo.py", "r") as f:
|
|
verify_script_content = f.read()
|
|
|
|
verify_command = f"""
|
|
odoo shell -c {ODOO_CONF} -d {DB_NAME} <<'EOF'
|
|
{verify_script_content}
|
|
EOF
|
|
"""
|
|
|
|
result = subprocess.run(
|
|
verify_command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
check=False
|
|
)
|
|
|
|
print("--- Verify Company Logo stdout ---")
|
|
print(result.stdout)
|
|
|
|
sys.exit(0)
|
|
|
|
except Exception as e:
|
|
print(f"Ocurrió un error inesperado al crear las solicitudes de laboratorio: {e}")
|
|
sys.exit(1)
|
|
|
|
except FileNotFoundError:
|
|
print("Error: El comando 'odoo' no se encontró. Asegúrate de que la imagen del contenedor es correcta y odoo está en el PATH.")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"Ocurrió un error inesperado al ejecutar Odoo: {e}")
|
|
sys.exit(1) |