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
151 lines
5.3 KiB
Markdown
151 lines
5.3 KiB
Markdown
# 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)
|
|
- [x] 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)
|
|
- [x] 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`
|
|
```php
|
|
$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/password** → `login.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 |