📊 Resumen de Módulos Completados
🧩 Módulos Detallados
👥 Societe (Terceros)
100% Completado📋 Descripción
Gestión de terceros (clientes, proveedores, prospects) con validaciones automáticas de datos, generación de códigos únicos y sincronización con contactos.
🔄 Transformaciones Realizadas
❌ PHP Original
- Validación manual de email
- Verificación de códigos duplicados
- Generación manual de códigos
- Establecimiento manual de defaults
✅ PostgreSQL Automatizado
- Validación automática regex email
- Constraint unicidad automática
- Generación códigos por triggers
- Defaults automáticos en INSERT
🎯 Características Clave
💻 Función Principal
CREATE OR REPLACE FUNCTION llx_societe_before_insert()
RETURNS trigger AS $$
BEGIN
-- Validar nombre obligatorio
IF NEW.nom IS NULL OR trim(NEW.nom) = '' THEN
RAISE EXCEPTION 'ErrorFieldRequired: nom';
END IF;
-- Validar email si está presente
IF NEW.email IS NOT NULL AND NEW.email != '' THEN
NEW.email = trim(lower(NEW.email));
IF NOT (NEW.email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') THEN
RAISE EXCEPTION 'ErrorBadEMail: %', NEW.email;
END IF;
END IF;
-- Generar código cliente automáticamente
IF NEW.client = 1 AND (NEW.code_client IS NULL OR trim(NEW.code_client) = '') THEN
NEW.code_client := llx_societe_get_next_code('C', NEW.entity);
END IF;
-- Establecer valores por defecto
NEW.entity := COALESCE(NEW.entity, 1);
NEW.status := COALESCE(NEW.status, 1);
NEW.datec := COALESCE(NEW.datec, NOW());
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
📦 Product (Productos)
100% Completado📋 Descripción
Gestión de productos y servicios con control automático de precios, históricos, stock y validaciones de coherencia.
🎯 Características Clave
💻 Cálculo Automático de Precios
-- Calcular precio TTC automáticamente
IF NEW.price IS NOT NULL AND NEW.tva_tx IS NOT NULL THEN
NEW.price_ttc := NEW.price * (1 + NEW.tva_tx / 100);
END IF;
-- Registrar en histórico si cambió el precio
IF OLD.price IS DISTINCT FROM NEW.price OR OLD.tva_tx IS DISTINCT FROM NEW.tva_tx THEN
INSERT INTO llx_product_price (
fk_product, date_price, price, price_ttc, tva_tx,
fk_user_author, entity
) VALUES (
NEW.rowid, NOW(), NEW.price, NEW.price_ttc, NEW.tva_tx,
COALESCE(NEW.fk_user_modif, NEW.fk_user_author, 1), NEW.entity
);
END IF;
👤 User (Usuarios)
100% Completado📋 Descripción
Sistema de usuarios con validaciones únicas de login/email, limpieza automática de datos y gestión de permisos.
🎯 Características Clave
🏦 Banque (Cuentas Bancarias)
100% Completado📋 Descripción
Gestión de cuentas bancarias con validaciones automáticas IBAN/BIC y control de saldos.
🎯 Características Clave
💰 Tax (Impuestos Locales)
100% Completado📋 Descripción
Gestión de impuestos locales con cálculos automáticos y validaciones de períodos.
🎯 Características Clave
📋 Propale (Presupuestos)
100% Completado📋 Descripción
Sistema completo de presupuestos con generación automática de referencias, cálculos de totales y gestión de líneas de detalle.
🎯 Características Clave
💻 Generación de Referencias
CREATE OR REPLACE FUNCTION llx_propal_get_next_ref(p_entity integer DEFAULT 1)
RETURNS varchar AS $$
DECLARE
v_current_year varchar(2);
v_current_month varchar(2);
v_current_num integer;
v_new_ref varchar(30);
BEGIN
-- Obtener año y mes actual
v_current_year := to_char(CURRENT_DATE, 'YY');
v_current_month := to_char(CURRENT_DATE, 'MM');
-- Buscar el siguiente número
SELECT COALESCE(MAX(
CAST(
CASE
WHEN ref ~ '^PR[0-9]{2}[0-9]{2}-[0-9]{4}$'
THEN substring(ref from 8 for 4)
ELSE '0'
END AS integer
)
), 0) + 1 INTO v_current_num
FROM llx_propal
WHERE ref ~ ('^PR' || v_current_year || v_current_month || '-[0-9]{4}$')
AND entity = p_entity;
-- Generar nueva referencia
v_new_ref := 'PR' || v_current_year || v_current_month || '-' ||
lpad(v_current_num::text, 4, '0');
RETURN v_new_ref;
END;
$$ LANGUAGE plpgsql;
📂 Categories (Categorías)
100% Completado📋 Descripción
Sistema de categorías jerárquico con gestión automática de relaciones y validaciones de integridad.
🎯 Características Clave
💝 Don (Donaciones)
100% Completado📋 Descripción
Gestión de donaciones con validaciones de datos personales y control de flujo de estados.
🎯 Características Clave
👨💼 Contact (Contactos)
100% Completado📋 Descripción
Gestión de contactos con sincronización automática con societes y validaciones de dependencias.
🎯 Características Clave
📦 Commande (Pedidos)
100% Completado📋 Descripción
Sistema completo de pedidos con generación automática de referencias, gestión de líneas de detalle y cálculos de totales.
🎯 Características Clave
💻 Gestión de Estados
-- Control de transiciones de estado
IF OLD.fk_statut != NEW.fk_statut THEN
-- No permitir volver a borrador una vez validado
IF OLD.fk_statut >= 1 AND NEW.fk_statut = 0 THEN
RAISE EXCEPTION 'No se puede volver a borrador un pedido validado';
END IF;
-- No permitir modificar pedidos cerrados
IF OLD.fk_statut = 3 THEN
RAISE EXCEPTION 'No se puede modificar un pedido cerrado';
END IF;
-- Establecer fecha de validación al validar
IF NEW.fk_statut = 1 AND OLD.fk_statut = 0 THEN
NEW.date_valid := COALESCE(NEW.date_valid, NOW());
-- Generar referencia definitiva al validar
IF NEW.ref LIKE '(PROV%' THEN
NEW.ref := llx_commande_get_next_ref(NEW.entity, NEW.fk_soc);
END IF;
END IF;
END IF;
📄 Facture (Facturas)
100% Completado📋 Descripción
Sistema completo de facturación con generación automática de referencias, cálculos de totales, gestión de líneas de detalle y facturación recurrente automática.
🎯 Características Clave
💻 Facturación Recurrente
CREATE OR REPLACE FUNCTION llx_facture_rec_create_invoice(
p_rec_id integer,
p_user_id integer,
p_force_validation boolean DEFAULT false
)
RETURNS integer
LANGUAGE plpgsql AS $$
DECLARE
v_rec_data record;
v_new_facture_id integer;
v_line record;
BEGIN
-- Obtener datos de la plantilla
SELECT * INTO v_rec_data
FROM llx_facture_rec
WHERE rowid = p_rec_id;
-- Crear nueva factura
INSERT INTO llx_facture (
fk_soc, type, total_ht, total_tva, total_ttc,
date_creation, fk_user_author, entity,
note_public, note_private
) VALUES (
v_rec_data.fk_soc, v_rec_data.type,
v_rec_data.total_ht, v_rec_data.total_tva, v_rec_data.total_ttc,
CURRENT_TIMESTAMP, p_user_id, v_rec_data.entity,
v_rec_data.note_public, v_rec_data.note_private
) RETURNING rowid INTO v_new_facture_id;
-- Copiar líneas de detalle
FOR v_line IN
SELECT * FROM llx_facturedet_rec
WHERE fk_facture = p_rec_id
LOOP
INSERT INTO llx_facturedet (
fk_facture, fk_product, qty, pu_ht,
total_ht, total_tva, total_ttc, tva_tx
) VALUES (
v_new_facture_id, v_line.fk_product, v_line.qty, v_line.pu_ht,
v_line.total_ht, v_line.total_tva, v_line.total_ttc, v_line.tva_tx
);
END LOOP;
-- Actualizar contador y fecha en plantilla
UPDATE llx_facture_rec
SET nb_gen_done = nb_gen_done + 1,
date_last_gen = CURRENT_TIMESTAMP
WHERE rowid = p_rec_id;
RETURN v_new_facture_id;
END;
$$;
📦 Stock (Gestión de Stock)
100% Completado📋 Descripción
Gestión completa de stock con movimientos automáticos, control de existencias y trazabilidad de productos.
🎯 Características Clave
📚 Bookkeeping (Contabilidad)
100% Completado📋 Descripción
Sistema de contabilidad de doble partida con asientos automáticos, validaciones y balances.
🎯 Características Clave
💰 ExpenseReport (Informes de Gastos)
100% Completado📋 Descripción
Sistema completo de informes de gastos con validaciones automáticas, cálculos de totales y gestión de aprobaciones.
🎯 Características Clave
🏪 FournisseurCommande (Pedidos a Proveedores)
100% Completado📋 Descripción
Sistema de pedidos a proveedores con gestión automática de estado, referencias y seguimiento de entregas.
🎯 Características Clave
🚚 Expeditions (Expediciones)
100% Completado📋 Descripción
Gestión de expediciones con control de stock, seguimiento de envíos y coordinación con transportistas.
🎯 Características Clave
📋 Contracts (Contratos)
100% Completado📋 Descripción
Sistema de contratos y suscripciones con gestión automática de fechas, estados y renovaciones.
🎯 Características Clave
🔄 Resumen de Transformaciones
📊 Estadísticas Globales
🎯 Patrones Aplicados
Validación Automática
Triggers BEFORE INSERT/UPDATE en todas las tablas principales
17 módulosGeneración de Códigos
Funciones especializadas para referencias únicas automáticas
8 módulosCálculos Automáticos
Triggers para totales, subtotales y precios con IVA
7 módulosControl de Estados
Validación de transiciones y flujos de negocio
9 módulosLimpieza de Datos
Trim automático y normalización de formatos
17 módulosAuditoría Automática
Timestamps y tracking de cambios transparente
17 módulos🚀 Próximos Módulos
Módulos identificados para completar la migración total del sistema Dolibarr.
🔧 Fichinter (Intervenciones)
Gestión de intervenciones técnicas con planificación, recursos y tracking de tiempo.
👥 Holiday (Vacaciones)
Sistema de gestión de vacaciones con aprobaciones, balances y calendarios.
🏗️ Project (Proyectos)
Gestión completa de proyectos con tareas, recursos y seguimiento temporal.
💰 Salary (Nóminas)
Sistema de nóminas con cálculos automáticos, deducciones y reportes.
⚙️ Otros Módulos (64 restantes)
Módulos especializados como Asset, MRP, Website, etc. según prioridades del negocio.