Files
ventas_php/md/plan-accion-multi-empresa.md
nickpons666 ee4945578e FASE 2 PARCIAL: Implementación core - Cambios críticos realizados
CAMBIOS REALIZADOS:
 ajax/login.php - Eliminado hardcodeo empresaId = 15
 classes/empresa.class.php - Método DoLogin() ahora obtiene empresaId dinámico
 classes/system-config.class.php - Lógica de BD dinámica (1=ventas_nm, >1=ventas_nm{id})

PROBLEMAS DETECTADOS:
⚠️ GetSingle() devuelve escalar no array
⚠️ empresaId obtenido = 0 (incorrecto)
⚠️ Warnings PHP en acceso a arrays nulos
⚠️ Compatibilidad sistema viejo vs nuevo

ARCHIVOS MODIFICADOS:
- ajax/login.php
- classes/empresa.class.php
- classes/system-config.class.php
- md/plan-accion-multi-empresa.md
- test_login_dinamico.php

SIGUIENTE PASO: Revisar GetSingle() y compatibilidad
2026-01-07 18:36:59 -06:00

4.1 KiB

Plan de Acción - Sistema Multi-Empresa Dinámico

Objetivo

Eliminar código hardcodeado con empresaId = 15 y implementar sistema dinámico que obtenga el empresaId del usuario logueado.

Reglas de Base de Datos

  • empresaId = 1 → usa base de datos ventas_nm (sin número)
  • empresaId > 1 → usa base de datos ventas_nm{empresaId} (con número)

Estructura del Sistema

  • Base Master: ventas_nmgen (usuarios, empresas, configuración)
  • Base Empresa: ventas_nm{empresaId} (datos operativos)

Fases del Proyecto

Fase 1: Análisis y Diagnóstico (En Progreso)

  • Identificar todos los archivos con código hardcodeado
  • Mapear flujo actual de autenticación
  • Analizar cómo se obtiene el empresaId del usuario
  • Revisar configuración actual de base de datos

Fase 2: Implementación Core (En Progreso)

  • Modificar ajax/login.php para obtener empresaId dinámico
  • Actualizar Empresa.class.php para manejo dinámico
  • Implementar lógica de base de datos dinámica
  • Actualizar SystemConfig para empresaId dinámico
  • Probar login dinámico con diferentes empresas

Fase 3: Actualización de Módulos (Pendiente)

  • Actualizar módulos de catálogos
  • Actualizar módulos de ventas
  • Actualizar módulos de inventarios
  • Actualizar módulos de reportes

Fase 4: Pruebas y Validación (Pendiente)

  • Pruebas con empresaId = 1 (base ventas_nm)
  • Pruebas con empresaId > 1 (base ventas_nm{numero})
  • Validar flujo completo de autenticación
  • Verificar funcionamiento de todos los módulos

Fase 5: Documentación y Limpieza (Pendiente)

  • Documentar nueva arquitectura
  • Limpiar código obsoleto
  • Actualizar comentarios
  • Crear guía de implementación

Archivos Críticos a Revisar

  • classes/system-config.class.php
  • classes/database-manager.class.php
  • init.php
  • config.php
  • Módulos principales (modules/)

Control de Versiones

  • Cada fase completada = 1 commit
  • No hacer push hasta autorización explícita
  • Esperar pruebas funcionales antes de subir

Notas Importantes

  • Mantener compatibilidad con código existente
  • Preservar seguridad del sistema
  • No romper funcionalidades actuales
  • Testing exhaustivo antes de producción

Hallazgos de Fase 1

🚨 Problema Principal Identificado

Archivo crítico: ajax/login.php:20

$empresa->setEmpresaId("15");  // HARDCODEADO

📋 Lista Completa de Archivos con empresaId = 15

Login y Autenticación:

  • ajax/login.php:20 - CRÍTICO - Seteo hardcodeado en login

Crons (13 archivos):

  • crons/reporte-inventario*.php (5 archivos)
  • crons/rep-prods-prov*.php (6 archivos)
  • crons/liberar-productos.php

AJAX:

  • ajax/facturas.php:9

🔍 Análisis del Flujo de Login

  1. Usuario ingresa email/passwordlogin.js
  2. AJAX envía a ajax/login.php
  3. PROBLEMA: $empresa->setEmpresaId("15") forza empresaId=15
  4. Consulta: usuario WHERE empresaId = 15 (solo busca en empresa 15)
  5. Establece sesión: $_SESSION["empresaId"] = 15

🎯 Solución Requerida

El login debe:

  1. Obtener empresaId de la tabla usuario basado en email/password
  2. NO forzar empresaId=15
  3. Usar el empresaId real del usuario para conectar a su base de datos

Resultados de Pruebas Fase 2

⚠️ Problemas Identificados

  • Login funciona pero obtiene empresaId = 0 (incorrecto)
  • Errores de PHP warnings en acceso a arrays nulos
  • Mensaje de "usuario o contraseña incorrecta" pero login continúa
  • Base de datos resultante: ventas_nm0 (incorrecto)

🔍 Análisis de Problemas

  1. GetSingle(): Devuelve valor escalar no array como se esperaba
  2. Compatibilidad: Sistema viejo vs nuevo en consulta SQL
  3. Warnings: Acceso a arrays nulos en db.class.php

🛠️ Soluciones Requeridas

  • Revisar método GetSingle() en DB class
  • Ajustar compatibilidad en consulta SQL
  • Corregir manejo de nulos

Estado: Fase 2 en progreso - Problemas de compatibilidad detectados Creado: 07-01-2026 Última actualización: 07-01-2026