Atajos de catálogos personalizables

This commit is contained in:
2025-07-03 11:45:26 -06:00
parent 495f908a25
commit 78a48ee596
11 changed files with 1626 additions and 751 deletions

View File

@@ -3,15 +3,166 @@ require_once __DIR__ . '/../helpers/session.php';
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../helpers/crypto.php';
// Función para obtener catálogos visibles del usuario
function obtenerCatalogosVisibles($idUsuario) {
$conn = getConnection();
// Obtener configuración general y tipo de usuario
$query = "SELECT preferencias_catalogos, tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
sqlsrv_close($conn);
return ['catalogos_activos' => false, 'catalogos' => []];
}
$usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
if (!$usuario) {
sqlsrv_close($conn);
return ['catalogos_activos' => false, 'catalogos' => []];
}
$catalogos_general = $usuario['preferencias_catalogos'] ?? 0;
$tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
// Si los catálogos están desactivados, solo mostrar obligatorios
if (!$catalogos_general) {
// Obtener solo catálogos obligatorios
$query = "SELECT nombre, descripcion, color, ruta, accion
FROM tipos_catalogos
WHERE tipo_usuario = ? AND nombre IN ('Configuración', 'Cerrar sesión')
ORDER BY id";
$stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
sqlsrv_close($conn);
return ['catalogos_activos' => false, 'catalogos' => []];
}
$catalogos = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$catalogos[] = [
'nombre' => $row['nombre'],
'descripcion' => $row['descripcion'],
'color' => $row['color'],
'ruta' => $row['ruta'],
'accion' => $row['accion'],
'visible' => true,
'obligatorio' => true
];
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
return ['catalogos_activos' => false, 'catalogos' => $catalogos];
}
// Obtener todos los catálogos para este tipo de usuario
$query = "SELECT nombre, descripcion, color, ruta, accion
FROM tipos_catalogos
WHERE tipo_usuario = ?
ORDER BY id";
$stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
sqlsrv_close($conn);
return ['catalogos_activos' => false, 'catalogos' => []];
}
// Crear array de catálogos disponibles
$catalogos_disponibles = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$catalogos_disponibles[] = [
'nombre' => $row['nombre'],
'descripcion' => $row['descripcion'],
'color' => $row['color'],
'ruta' => $row['ruta'],
'accion' => $row['accion'],
'campo_bd' => strtolower(str_replace([' ', 'ó', 'ú', 'á', 'é', 'í'], ['_', 'o', 'u', 'a', 'e', 'i'], $row['nombre']))
];
}
sqlsrv_free_stmt($stmt);
// Obtener preferencias específicas del usuario
$preferencias = [];
switch ($tipoUsuario) {
case 'importador':
$query = "SELECT * FROM preferencias_catalogos_usuario WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
if ($stmt && sqlsrv_execute($stmt)) {
$preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
if ($preferenciasRow) {
$preferencias = $preferenciasRow;
}
sqlsrv_free_stmt($stmt);
}
break;
// Aquí agregarías otros casos cuando implementes otros tipos de usuario
}
// Determinar qué catálogos mostrar
$catalogos_visibles = [];
foreach ($catalogos_disponibles as $catalogo) {
$campo = $catalogo['campo_bd'];
$esObligatorio = in_array($catalogo['nombre'], ['Configuración', 'Cerrar sesión']);
if ($esObligatorio) {
// Catálogos obligatorios siempre visibles
$catalogo['visible'] = true;
$catalogo['obligatorio'] = true;
} else {
// Verificar si está activado en preferencias
$catalogo['visible'] = isset($preferencias[$campo]) && $preferencias[$campo] == 1;
$catalogo['obligatorio'] = false;
}
if ($catalogo['visible']) {
$catalogos_visibles[] = $catalogo;
}
}
sqlsrv_close($conn);
return [
'catalogos_activos' => true,
'catalogos' => $catalogos_visibles,
'tipo_usuario' => $tipoUsuario
];
}
// Función para obtener icono según el nombre del catálogo
function obtenerIconoCatalogo($nombre) {
$iconos = [
'Locaciones' => '📍',
'Vinculación' => '🔗',
'Transportistas' => '🚚',
'Transportes' => '🚛',
'Choferes' => '👨‍✈️',
'Proveedores' => '🏭',
'Productos frecuentes' => '⭐',
'Solicitudes importación' => '📄',
'Expediente electrónico' => '📁',
'Configuración' => '⚙️',
'Cerrar sesión' => '🚪'
];
return $iconos[$nombre] ?? '📁';
}
// Función para el dashboard del importador
function dashboard()
{
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
header('Location: /IMPORTADORES/login');
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
header("Location: /IMPORTADORES/login");
exit;
}
$nombreImportador = $_SESSION['usuario_nombre'];
// Obtener catálogos visibles
$catalogosData = obtenerCatalogosVisibles($idUsuario);
include __DIR__ . '/../../views/importadores/dashboard_importador.php';
}