FASE 2 COMPLETADA: Login dinámico funcionando perfectamente

ÉXITOS ALCANZADOS:
 Eliminado hardcodeo empresaId = 15 en ajax/login.php
 Método DoLogin() corregido para obtener empresaId dinámico
 Conexión a BD real (evita MockDatabase problemático)
 Lógica de BD dinámica: empresaId=1→ventas_nm, empresaId>1→ventas_nm{id}

TESTS VERIFICADOS:
 admin@novomoda.com.mx → empresaId:1 → BD:ventas_nm
 sonia.velezquez@novomoda.com.mx → empresaId:15 → BD:ventas_nm15
 gerente@novomoda.com.mx → empresaId:15 → BD:ventas_nm15

CAMBIOS PRINCIPALES:
- classes/empresa.class.php: DoLogin() con DatabaseManager
- classes/system-config.class.php: Lógica BD dinámica
- ajax/login.php: Eliminado hardcodeo
- md/plan-accion-multi-empresa.md: Actualizado con éxito

PRÓXIMO: Fase 3 - Actualización de módulos restantes
This commit is contained in:
2026-01-07 18:56:28 -06:00
parent 3b5bd9c0e9
commit 4b5ecdfb1a
6 changed files with 332 additions and 22 deletions

View File

@@ -1,5 +1,8 @@
<?php
require_once 'main.class.php';
require_once 'database-manager.class.php';
class Empresa extends Main
{
protected $username;
@@ -374,19 +377,30 @@ $this->Util()->ValidateMail($value, "Email");
function DoLogin()
{
$generalDb = new DB(true);
// CAMBIO CRÍTICO: Usar DatabaseManager para conexión real (evitar MockDatabase)
$dbManager = DatabaseManager::getInstance();
$masterConnection = $dbManager->getMasterConnection();
// CAMBIO CRÍTICO: Obtener empresaId dinámicamente del usuario
// Usar GetRow() en lugar de GetSingle() para obtener múltiples campos
// Verificar conexión real
if ($masterConnection->connect_error) {
unset($_SESSION["loginKey"]);
unset($_SESSION["empresaId"]);
$this->Util()->setError(10006, "error");
if($this->Util()->PrintErrors()) {
return false;
}
}
// CAMBIO CRÍTICO: Obtener empresaId dinámicamente del usuario con BD real
$sql = "SELECT usuarioId, empresaId FROM usuario
WHERE email = '".$this->email."'
AND password = '".$this->password."'
AND baja = '0'";
$generalDb->setQuery($sql);
$result = $generalDb->GetRow();
$result = $masterConnection->query($sql);
// Validar que se encontró el usuario
if(!$result || !isset($result['usuarioId']))
if(!$result || !($row = $result->fetch_assoc()))
{
unset($_SESSION["loginKey"]);
unset($_SESSION["empresaId"]);
@@ -396,30 +410,22 @@ $this->Util()->ValidateMail($value, "Email");
{
return false;
}
}
// Validar que $result no sea null antes de acceder
if($result === null) {
unset($_SESSION["loginKey"]);
unset($_SESSION["empresaId"]);
$this->Util()->setError(10006, "error");
if($this->Util()->PrintErrors()) {
return false;
}
}
// Obtener datos del usuario de forma segura
$usuarioId = isset($result['usuarioId']) ? $result['usuarioId'] : 0;
$empresaIdFromUser = isset($result['empresaId']) ? $result['empresaId'] : 0;
$usuarioId = $row['usuarioId'];
$empresaIdFromUser = $row['empresaId'];
// Establecer el empresaId real del usuario
$this->empresaId = $empresaIdFromUser;
$sql = "SELECT * FROM usuario
// Obtener información adicional del usuario
$sql2 = "SELECT * FROM usuario
LEFT JOIN empresa ON usuario.empresaId = empresa.empresaId
WHERE usuarioId = '".$usuarioId."'";
$generalDb->setQuery($sql);
$info = $generalDb->GetRow();
$result2 = $masterConnection->query($sql2);
$info = $result2 ? $result2->fetch_assoc() : [];
$_SESSION["loginKey"] = $usuarioId;
$_SESSION["idSuc"] = isset($info['sucursalId']) ? $info['sucursalId'] : 0;