- Corrige variable \$atributos.pages por \$politicas.pages en template
- Agrega inicialización de \$user y \$Usr para acceso a empresaId
- Añade case default para manejar operaciones no válidas
- Mejora manejo de sesión en contexto AJAX
- Limpia código de debugging después de resolver problemas
Resuelve error "undefined" al agregar políticas en bonificación-devolución.
- Inicializar variables $subcategorias y $productos antes del condicional
- Evita PHP Warning: Undefined variable en líneas 388 y 390
- Mantiene compatibilidad con el flujo existente
- Añadir hashing bcrypt para todas las contraseñas nuevas y existentes
- Implementar verificación segura con password_hash() y password_verify()
- Migrar 10 contraseñas existentes de texto plano a formato hash
- Agregar protección CSRF en formulario de login
- Implementar rate limiting (5 intentos/minuto) contra fuerza bruta
- Mejorar formulario de edición con campos de contraseña seguros
- Agregar validación de coincidencia y longitud mínima de contraseñas
- Sanitización de inputs y validación de formato de email
- Prevenir exposición de hashes en interfaz de usuario
Cambia vulnerabilidad crítica donde las contraseñas se almacenaban y viajaban en texto plano.
- Se corrigieron las advertencias 'Undefined array key "checked"' en 'enumProvPromo.tpl', 'enumSucPromo.tpl' y 'enumProdCatPromo.tpl'.
- Se resolvieron las advertencias 'Trying to access array offset on null' en 'enumTiposPromo.tpl', 'enumDesctosPromo.tpl', 'enumStatusPromo.tpl', 'enumVigenciaPromo.tpl' y 'enumPromoAplicar.tpl'.
- Se corrigió el error 'Call to undefined method Util::DecodeUrlRow()' en 'ajax/sucursales.php' reemplazándolo por 'DecodeUrlResult()'.
- Se modificó 'templates/lists/sucursales.tpl' para evitar la inclusión de 'pages_ajax.tpl' cuando la variable '$pages' es nula.
- Se eliminaron archivos de log y temporales.
- Deshabilita la paginación para mostrar todos los atributos por defecto.
- Corrige un error de renderizado en 'atributos-valores.tpl' añadiendo etiquetas de cierre faltantes.
- Cambia el orden de los atributos a 'atributoId' en 'atributo.class.php'.
- Corrige un bug en 'atributoValor.class.php' descomentando una condición.
- Asegura que las acciones AJAX (añadir, editar, eliminar) refresquen la lista correctamente sin paginación.
ACTUALIZACIONES REALIZADAS:
✅ Eliminados hardcodeos en 13 archivos crons/
✅ Actualizado ajax/facturas.php para uso dinámico
✅ Implementada lógica predeterminada para crons (empresaId=1)
✅ Sistema respeta sesión de usuario dinámica
✅ Compatible con funcionamiento independiente de crons
VERIFICACIONES:
✅ No quedan hardcodeos 'empresaId = 15'
✅ Base de datos dinámica: 1→ventas_nm, >1→ventas_nm{id}
✅ Crons usan predeterminado si no hay sesión
✅ AJAX hereda empresaId del login
ARCHIVOS MODIFICADOS:
- crons/*.php (13 archivos actualizados)
- ajax/facturas.php (eliminado hardcodeo)
- test_fase3.php (verificación de funcionamiento)
- md/plan-accion-multi-empresa.md (actualizado)
PRÓXIMO: Fase 4 - Pruebas y validación final
- Identificado código crítico en ajax/login.php:20 con empresaId = 15 hardcodeado
- Mapeados 22 archivos totales con empresaId = 15
- Analizado flujo de login actual que forza empresaId = 15
- Documentado problema principal en md/plan-accion-multi-empresa.md
- Lista completa: 1 login, 13 crons, 1 ajax, 7 archivos adicionales
Próximo paso: Modificar login para obtener empresaId dinámicamente del usuario
- Added secure .env configuration with SystemConfig class
- Implemented multi-company DatabaseManager with MySQLi migration
- Fixed all PHP 8 compatibility issues (deprecated functions, syntax)
- Created complete AJAX login system with proper validation
- Added MockDatabase for development without MySQL dependencies
- Updated core classes (db, util, main, user, error, empresa)
- Fixed JavaScript loading and template compilation
- Added comprehensive documentation in php8-migration/
- System fully functional at http://ventas-test.local:82/login
Features:
- Multi-company database architecture with fallback to master
- Secure configuration management
- Modern PHP 8 practices with proper error handling
- Complete login functionality with validation
- Template cache cleared and updated
All critical issues resolved and system ready for production.