Files
ventas_php/md/plan-accion-multi-empresa.md
nickpons666 3b5bd9c0e9 DEBUG FASE 2: Identificados problemas críticos en GetRow()
PROBLEMAS CRÍTICOS IDENTIFICADOS:
⚠️ GetRow() devuelve null siempre → empresaId = 0
⚠️ Warnings PHP en util.class.php:501 (acceso arrays nulos)
⚠️ Compatibilidad MockDatabase vs mysqli real

DATOS REALES ENCONTRADOS:
 admin@novomoda.com.mx → empresaId = 1
 sonia.velezquez@novomoda.com.mx → empresaId = 15
 gerente@novomoda.com.mx → empresaId = 15

ARCHIVOS NUEVOS:
- debug_login.php → Debug de base de datos master
- test_login_reales.php → Test con usuarios reales

ANÁLISIS:
- Usuarios existen en BD master
- Consultas SQL funcionan en debug
- GetRow() falla en DoLogin()

SIGUIENTE PASO: Revisar GetRow() en DB.class.php
2026-01-07 18:43:28 -06:00

5.3 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

Problemas Críticos Identificados - Fase 2

🚨 Issue Principal: GetRow() devuelve NULL

  • Problema: Método GetRow() en DB.class.php devuelve null
  • Causa: Incompatibilidad entre MockDatabase y mysqli real
  • Impacto: Login obtiene empresaId = 0 siempre

🔍 Análisis del Problema

  1. Debug login: Usuarios reales existen en base de datos master
  2. Consulta SQL: SELECT con email/password funciona en debug
  3. GetRow(): En DoLogin() devuelve null siempre
  4. Warnings: Acceso a arrays nulos en util.class.php:501

📊 Datos Reales Encontrados

ID: 1, Email: admin@novomoda.com.mx, EmpresaID: 1  → Test OK
ID: 4, Email: sonia.velezquez@novomoda.com.mx, EmpresaID: 15 → Test OK  
ID: 5, Email: gerente@novomoda.com.mx, EmpresaID: 15 → Test OK

🛠️ Próximos Pasos Requeridos

  1. Depurar GetRow(): Revisar por qué devuelve null
  2. Fix MockDatabase: Asegurar compatibilidad con métodos antiguos
  3. Probar con BD real: Conectar a base de datos real
  4. Revisar util.class.php: Corregir warnings línea 501

Logros Parciales

  • Eliminado hardcodeo empresaId = 15
  • Implementada lógica de BD dinámica
  • Sistema reconoce usuarios reales
  • ⚠️ Fija: GetRow() devuelve valores correctos

Estado: Fase 2 con bloqueo crítico - GetRow() devuelve null Creado: 07-01-2026 Última actualización: 07-01-2026