🚀 Instalación 7Ges ERP

Guía completa para instalar 7Ges ERP Cliente/Servidor, la evolución de Dolibarr hacia un modelo arquitectónico revolucionario con PostgreSQL exclusivo y lógica centralizada.

💻

Requisitos del Sistema

PostgreSQL 12+, PHP 7.4+, configuración optimizada

🔧

Proceso Guiado

Instalación paso a paso con verificación automática

🔒

Soporte Completo

Testing, troubleshooting y administración avanzada

🚀 Bienvenido a 7Ges ERP Cliente/Servidor

7Ges ERP es la evolución de Dolibarr hacia un modelo cliente/servidor puro donde toda la lógica de negocio reside en PostgreSQL. Esta arquitectura revolucionaria garantiza consistencia, performance y confiabilidad excepcionales.

✨ Beneficios Clave

  • 🔒 Consistencia Garantizada: Las reglas de negocio se ejecutan siempre, sin excepciones
  • ⚡ Performance Superior: Cálculos y validaciones optimizados en la base de datos
  • 🛡️ Seguridad Reforzada: Validaciones imposibles de omitir
  • 🔧 Mantenimiento Simplificado: Lógica centralizada y documentada
  • 📊 Auditoría Completa: Tracking automático de todos los cambios

📋 Información de la Versión

Versión: 7Ges ERP 1.0.0
Base: Dolibarr con modelo cliente/servidor
Base de Datos: PostgreSQL exclusivo
Módulos Migrados: 10 de 15 (67%)
Tests: 429 unitarios + 67 comparativos

📋 Requisitos del Sistema

🖥️ Servidor Web

  • Apache: 2.4+ con mod_rewrite
  • Nginx: 1.18+ (alternativo)
  • PHP: 7.4+ a 8.2
  • Memoria: 512MB mínimo, 2GB recomendado
  • Espacio: 1GB para aplicación + datos

🐘 PostgreSQL (CRÍTICO)

  • Versión: PostgreSQL 12+ (recomendado 14+)
  • Extensiones: pgTAP para testing (opcional)
  • Configuración: UTF-8, timezone configurado
  • Permisos: CREATE, DROP, ALTER sobre BD
  • ⚠️ IMPORTANTE: MySQL/MariaDB NO soportado

🔧 PHP Extensiones

  • pgsql: Conexión PostgreSQL (obligatorio)
  • pdo_pgsql: PDO PostgreSQL (obligatorio)
  • gd: Manipulación de imágenes
  • curl: Comunicaciones HTTP
  • xml: Procesamiento XML
  • zip: Compresión de archivos

⚠️ Compatibilidad Importante

7Ges ERP es EXCLUSIVO para PostgreSQL. No mantiene compatibilidad con MySQL/MariaDB por diseño. Esta decisión permite aprovechar al máximo las capacidades avanzadas de PostgreSQL y garantizar la consistencia del modelo cliente/servidor.

🆕 Instalación Nueva

Proceso completo para instalar 7Ges ERP desde cero con modelo cliente/servidor.

1

Preparar Base de Datos PostgreSQL

Crear la base de datos y usuario para 7Ges ERP.

Comandos PostgreSQL:

-- Conectarse como usuario postgres
sudo -u postgres psql

-- Crear usuario para 7Ges ERP
CREATE USER erp7ges WITH PASSWORD 'contraseña_segura';

-- Crear base de datos
CREATE DATABASE erp7ges 
    OWNER erp7ges 
    ENCODING 'UTF8' 
    LC_COLLATE = 'es_ES.UTF-8' 
    LC_CTYPE = 'es_ES.UTF-8'
    TEMPLATE template0;

-- Otorgar permisos
GRANT ALL PRIVILEGES ON DATABASE erp7ges TO erp7ges;

-- Verificar conexión
\c erp7ges erp7ges
2

Descargar y Configurar 7Ges ERP

Obtener los archivos de 7Ges ERP y configurar permisos.

Comandos del Sistema:

# Descargar 7Ges ERP
cd /var/www/html
git clone https://github.com/7ges/7ges-erp.git
cd 7ges-erp

# Configurar permisos
sudo chown -R www-data:www-data .
sudo chmod -R 755 .
sudo chmod -R 777 documents/
sudo chmod -R 777 htdocs/conf/

# Verificar extensiones PHP
php -m | grep -E '(pgsql|pdo_pgsql|gd|curl)'
3

Ejecutar Instalador Web

Acceder al instalador web y configurar la conexión PostgreSQL.

🌐 Pasos del Instalador:

  1. Navegar a: http://tu-servidor/7ges-erp/htdocs/install/
  2. Seleccionar idioma: Español
  3. Verificar prerrequisitos: Confirmar PostgreSQL
  4. Configurar base de datos:
    • Tipo: PostgreSQL (pgsql)
    • Servidor: localhost (o IP del servidor)
    • Puerto: 5432
    • Base de datos: erp7ges
    • Usuario: erp7ges
    • Contraseña: [la configurada]
  5. Crear administrador: Usuario inicial del sistema
  6. Finalizar: El instalador cargará automáticamente las funciones PostgreSQL

✨ Funciones Automáticas

El instalador de 7Ges ERP automáticamente carga todas las funciones y triggers PostgreSQL de los módulos migrados. No requiere configuración manual adicional.

4

Verificar Instalación

Comprobar que todas las funciones PostgreSQL están cargadas correctamente.

Script de Verificación:

-- Conectarse a la base de datos
\c erp7ges

-- Verificar funciones principales cargadas
SELECT 
    routine_name,
    routine_type
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'llx_%'
ORDER BY routine_name;

-- Verificar triggers principales
SELECT 
    schemaname, 
    tablename, 
    triggername
FROM pg_triggers
WHERE schemaname = 'public'
AND triggername LIKE 'trg_%'
ORDER BY tablename, triggername;

-- Verificar módulos con funciones cargadas
SELECT DISTINCT
    substring(routine_name from 'llx_([^_]+)_.*') as modulo,
    COUNT(*) as funciones
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'llx_%'
GROUP BY modulo
ORDER BY modulo;

✅ Checklist de Verificación

  • 59+ funciones PostgreSQL cargadas
  • 51+ triggers activos
  • Módulos con funciones: societe, product, user, banque, tax, propale, categories, don, contact, commande
  • Acceso exitoso al panel de administración
  • Creación de tercero de prueba funciona

🔄 Migración desde Dolibarr Existente

Proceso para migrar una instalación existente de Dolibarr a 7Ges ERP.

⚠️ Advertencia Importante

La migración es IRREVERSIBLE. 7Ges ERP elimina completamente la compatibilidad con MySQL y modifica sustancialmente el comportamiento del sistema. Realice backup completo antes de proceder.

1. 📊 Preparación y Backup

# Backup completo MySQL (si viene de MySQL)
mysqldump -u root -p dolibarr_db > backup_dolibarr_$(date +%Y%m%d).sql

# Backup completo PostgreSQL (si ya está en PostgreSQL)
pg_dump -U usuario -d dolibarr_db > backup_dolibarr_$(date +%Y%m%d).sql

# Backup archivos
tar -czf backup_files_$(date +%Y%m%d).tar.gz /ruta/dolibarr/

2. 🔄 Migración de Datos

Si viene de MySQL, migrar datos a PostgreSQL usando herramientas especializadas:

# Opción A: Usar pgloader (recomendado)
sudo apt-get install pgloader
pgloader mysql://user:pass@localhost/dolibarr_db \
         postgresql://user:pass@localhost/erp7ges

# Opción B: Migración manual con conversión
# (Requiere script personalizado según estructura)

3. ⚙️ Carga de Funciones 7Ges

# Cargar todas las funciones de módulos migrados
cd /var/www/html/7ges-erp
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-societe.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-product.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-user.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-banque.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-tax.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-propale.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-categories.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-don.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-contact.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-commande.sql

4. 🧪 Validación Post-Migración

Ejecutar tests para verificar que la migración fue exitosa:

# Ejecutar tests de estructura (opcional, requiere pgTAP)
cd /var/www/html/7ges-erp
./run_pgtap_tests.sh estructura

# Verificar funciones manualmente
psql -U erp7ges -d erp7ges -c "
SELECT COUNT(*) as funciones_cargadas 
FROM information_schema.routines 
WHERE routine_name LIKE 'llx_%';"

# Probar funcionalidad básica
# - Crear tercero
# - Crear producto  
# - Generar presupuesto
# - Verificar cálculos automáticos

🧪 Testing y Validación

Sistema completo de testing para validar la integridad de 7Ges ERP.

🏗️ Arquitectura de Testing

Tests de Estructura

Verifican que todas las tablas, campos y constraints existen

56 tests

Tests Unitarios pgTAP

Validan funciones individuales y triggers

1,215 tests

Tests Comparativos

Garantizan paridad con comportamiento original PHP

68 tests

🔧 Configuración de pgTAP (Opcional)

pgTAP permite ejecutar los tests unitarios avanzados.

Instalación pgTAP:

# Ubuntu/Debian
sudo apt-get install postgresql-contrib-XX  # XX = versión de PostgreSQL

# O compilar desde fuente
git clone https://github.com/theory/pgtap.git
cd pgtap
make
sudo make install

# Instalar en la base de datos
psql -U erp7ges -d erp7ges -c "CREATE EXTENSION pgtap;"

▶️ Ejecutar Tests

Scripts de Testing Disponibles:

🏗️ Tests de Estructura
# Ejecutar tests de estructura de todos los módulos
cd /var/www/html/7ges-erp
./run_pgtap_tests.sh estructura

# Test específico de un módulo
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/tests/test-societe-estructura.sql
🧪 Tests Unitarios Completos
# Ejecutar TODOS los tests (1,215 tests)
./run_pgtap_tests.sh all

# Test específico de un módulo
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/tests/test-societe.sql

# Ver resultados detallados
./run_pgtap_tests.sh societe | grep -E "(not ok|#)"
⚖️ Tests Comparativos
# Sincronizar bases de datos de test
./sync-test-databases-final.sh

# Ejecutar test comparativo específico
php htdocs/societe/test-comparativo-societe.php

# Validar resultados en PostgreSQL  
psql -U erp7ges -d dolibarr_test_postgresql -f htdocs/societe/test-comparativo-societe-sql.sql

📊 Interpretación de Resultados

✅ Tests Exitosos

ok 1 - Función llx_societe_before_insert debe existir
ok 2 - Email debe validarse correctamente
...
1..49
# Tests passed: 49/49

Estado: Todo funcionando correctamente

⚠️ Tests con Advertencias

ok 1 - Función existe
not ok 2 - Email inválido debe fallar
# Expected exception but none thrown
...
# Tests passed: 48/49

Acción: Revisar la función específica que falla

❌ Tests Fallidos

not ok 1 - Función llx_societe_before_insert debe existir
# Function does not exist
...
# Tests passed: 0/49

Acción: Verificar que las funciones PostgreSQL estén cargadas

🔧 Comandos de Administración

💾 Backup y Restauración

Backup Completo

# Backup completo con funciones
pg_dump -U erp7kas -d erp7kas \
  --verbose --clean --create \
  > backup_7ges_$(date +%Y%m%d_%H%M%S).sql

# Backup solo datos (sin funciones)
pg_dump -U erp7kas -d erp7kas \
  --data-only --verbose \
  > backup_data_$(date +%Y%m%d).sql

Restauración

# Restaurar backup completo
psql -U erp7ges -d erp7ges_new < backup_7ges_20250106_143022.sql

# Restaurar solo datos
psql -U erp7ges -d erp7ges < backup_data_20250106.sql

🧹 Mantenimiento

Optimización BD

# Análisis de estadísticas
psql -U erp7ges -d erp7ges -c "ANALYZE;"

# Vacuum completo
psql -U erp7ges -d erp7ges -c "VACUUM VERBOSE;"

# Reindexar (si es necesario)
psql -U erp7ges -d erp7ges -c "REINDEX DATABASE erp7ges;"

Limpieza de Logs

# Limpiar archivos de log antiguos
find /var/log/apache2/ -name "*.log.*" -mtime +30 -delete

# Limpiar cache PHP si existe
rm -rf /tmp/php_cache/*

# Limpiar temporales de Dolibarr
rm -rf documents/admin/temp/*

📊 Monitoreo

Estado del Sistema

# Conexiones activas PostgreSQL
psql -U erp7ges -d erp7ges -c "
SELECT count(*) as conexiones_activas, 
       state 
FROM pg_stat_activity 
WHERE datname = 'erp7ges' 
GROUP BY state;"

# Tamaño de la base de datos
psql -U erp7ges -d erp7ges -c "
SELECT pg_size_pretty(pg_database_size('erp7ges')) as tamaño_bd;"

Logs de Errores

# Últimos errores PostgreSQL
sudo tail -f /var/log/postgresql/postgresql-*.log

# Errores PHP de Apache
sudo tail -f /var/log/apache2/error.log | grep -i "7ges\|dolibarr"

# Logs de aplicación (si configurados)
tail -f documents/dolibarr.log

🔄 Actualización de Funciones

Recargar Funciones Específicas

# Recargar funciones de un módulo específico
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-societe.sql

# Verificar que se cargaron correctamente
psql -U erp7ges -d erp7ges -c "
SELECT routine_name 
FROM information_schema.routines 
WHERE routine_name LIKE 'llx_societe_%';"

Actualización Completa

# Script para recargar todas las funciones
#!/bin/bash
cd /var/www/html/7ges-erp
for func_file in htdocs/install/pgsql/functions/functions-*.sql; do
    echo "Cargando $func_file..."
    psql -U erp7ges -d erp7ges -f "$func_file"
done
echo "Todas las funciones actualizadas."

🛠️ Solución de Problemas Comunes

❌ Error: "relation llx_tabla does not exist"

Causa:

Falta tabla de relación específica no creada en todas las instalaciones.

Solución:

-- Verificar qué tablas faltan
SELECT tablename 
FROM pg_tables 
WHERE schemaname = 'public' 
AND tablename LIKE 'llx_%'
ORDER BY tablename;

-- Crear tabla faltante (ejemplo)
CREATE TABLE IF NOT EXISTS llx_categorie_fichinter (
    fk_categorie integer NOT NULL,
    fk_fichinter integer NOT NULL,
    import_key varchar(14),
    PRIMARY KEY (fk_categorie, fk_fichinter)
);

⚠️ Error: "function llx_modulo_function does not exist"

Causa:

Funciones PostgreSQL no cargadas o cargadas incorrectamente.

Solución:

# Verificar funciones cargadas
psql -U erp7ges -d erp7ges -c "
SELECT routine_name 
FROM information_schema.routines 
WHERE routine_name LIKE 'llx_%' 
ORDER BY routine_name;"

# Recargar funciones del módulo específico
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-modulo.sql

🔄 Error: Tests pgTAP Fallando

Causa:

Datos de test inconsistentes o modificados por tests anteriores.

Solución:

# Sincronizar bases de datos de test
./sync-test-databases-final.sh

# Ejecutar test específico en modo verbose
psql -U erp7ges -d dolibarr_test_postgresql -f htdocs/install/pgsql/tests/test-modulo.sql

# Ver detalles del error
psql -U erp7ges -d dolibarr_test_postgresql -c "
SELECT * FROM pg_stat_activity WHERE state = 'active';"

💾 Error: "out of memory" en PostgreSQL

Causa:

Configuración insuficiente de memoria PostgreSQL.

Solución:

# Editar configuración PostgreSQL
sudo nano /etc/postgresql/XX/main/postgresql.conf

# Ajustar parámetros (ejemplo para servidor con 4GB RAM)
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB

# Reiniciar PostgreSQL
sudo systemctl restart postgresql

📚 Recursos Adicionales

🔧 Archivos de Configuración

  • htdocs/conf/conf.php - Configuración principal
  • htdocs/install/pgsql/functions/ - Funciones PostgreSQL
  • htdocs/install/pgsql/tests/ - Tests pgTAP
  • docs/migracion/ - Documentación técnica

🆘 Soporte

  • Logs del Sistema: /var/log/postgresql/
  • Logs de Apache: /var/log/apache2/
  • Tests de Validación: ./run_pgtap_tests.sh
  • Documentación Proyecto: *.md en directorio raíz