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

@@ -540,4 +540,297 @@ function esDiaResumen($config_dias)
return in_array($dia_letra, array_map('trim', $dias_activos));
}
}
?>
function catalogos()
{
$conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
header("Location: /IMPORTADORES/login");
exit;
}
// Obtener configuración general de catalogos 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)) {
die("Error al obtener configuración: " . print_r(sqlsrv_errors(), true));
}
$usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
if (!$usuario) {
die("Usuario no encontrado");
}
$catalogos = $usuario['preferencias_catalogos'] ?? 0;
$tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
// Obtener preferencias específicas según el tipo de usuario
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);
sqlsrv_free_stmt($stmt);
} else {
$preferenciasRow = false;
}
// Si no existe registro, crear valores por defecto para importador
if (!$preferenciasRow) {
$preferencias = [
'locaciones' => 0,
'vinculacion' => 0,
'transportistas' => 0,
'transportes' => 0,
'choferes' => 0,
'proveedores' => 0,
'productos_frecuentes' => 0,
'solicitudes_importacion' => 0,
'expediente_electronico' => 0,
'configuracion' => 0,
'cerrar_sesion' => 0
];
} else {
$preferencias = $preferenciasRow;
}
break;
// case 'agente_aduanal':
// $query = "SELECT * FROM preferencias_catalogos_agente WHERE id_usuario = ?";
// $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
// if ($stmt && sqlsrv_execute($stmt)) {
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// }
// Si no existe registro, crear valores por defecto para agente aduanal
// if (!$preferenciasRow) {
// $preferencias = [
// Aquí se definirán los campos específicos para agente aduanal
// cuando se creen las tablas correspondientes
// 'configuracion' => 0,
// 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
// }
// break;
// case 'admin_agencia':
// $query = "SELECT * FROM preferencias_catalogos_agencia WHERE id_usuario = ?";
// $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
// if ($stmt && sqlsrv_execute($stmt)) {
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// }
// Si no existe registro, crear valores por defecto para admin agencia
// if (!$preferenciasRow) {
// $preferencias = [
// Aquí se definirán los campos específicos para admin agencia
// cuando se creen las tablas correspondientes
// 'configuracion' => 0,
// 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
// }
// break;
// case 'super_admin':
// $query = "SELECT * FROM preferencias_catalogos_admin WHERE id_usuario = ?";
// $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
// if ($stmt && sqlsrv_execute($stmt)) {
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// }
// Si no existe registro, crear valores por defecto para super admin
// if (!$preferenciasRow) {
// $preferencias = [
// Aquí se definirán los campos específicos para super admin
// cuando se creen las tablas correspondientes
// 'configuracion' => 0,
// 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
// }
// break;
default:
// Tipo de usuario no reconocido, usar valores por defecto mínimos
$preferencias = [
'configuracion' => 0,
'cerrar_sesion' => 0
];
break;
}
// Obtener tipos de catalogos disponibles según el tipo de usuario
$query = "SELECT nombre, descripcion, color FROM tipos_catalogos WHERE tipo_usuario = ? ORDER BY id";
$stmt = sqlsrv_prepare($conn, $query, [$tipoUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
die("Error al obtener tipos: " . print_r(sqlsrv_errors(), true));
}
// Crear array asociativo para la vista
$tipos = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$tipos[$row['nombre']] = [
'descripcion' => $row['descripcion'],
'color' => $row['color']
];
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
include __DIR__ . '/../../views/preferencias/catalogos.php';
}
function guardarCatalogosAjax()
{
// Verificar que sea una petición AJAX
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) ||
$_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Petición no válida']);
exit;
}
// Obtener datos JSON del cuerpo de la petición
$input = json_decode(file_get_contents('php://input'), true);
if (!$input || !isset($input['tipo'])) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Datos no válidos']);
exit;
}
$conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Usuario no autenticado']);
exit;
}
// Obtener tipo de usuario
$query = "SELECT tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Error al obtener información del usuario']);
exit;
}
$usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
try {
$tipo = $input['tipo'];
switch ($tipo) {
case 'catalogos_general':
// Actualizar preferencias generales de catálogos
$valor = isset($input['valor']) && $input['valor'] ? 1 : 0;
$query = "UPDATE usuarios_sistema SET preferencias_catalogos = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception('Error al actualizar preferencias generales');
}
sqlsrv_free_stmt($stmt);
break;
case 'tipo_catalogo':
// Actualizar preferencia específica de catálogo
if (!isset($input['nombre']) || !isset($input['valor'])) {
throw new Exception('Datos incompletos para tipo de catálogo');
}
$nombre = $input['nombre'];
$valor = $input['valor'] ? 1 : 0;
// Determinar la tabla según el tipo de usuario
$tabla = '';
switch ($tipoUsuario) {
case 'importador':
$tabla = 'preferencias_catalogos_usuario';
break;
case 'agente_aduanal':
$tabla = 'preferencias_catalogos_agente';
break;
case 'admin_agencia':
$tabla = 'preferencias_catalogos_agencia';
break;
case 'super_admin':
$tabla = 'preferencias_catalogos_admin';
break;
default:
throw new Exception('Tipo de usuario no válido');
}
// Verificar si existe un registro para este usuario
$query = "SELECT id_preferencia FROM $tabla WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception('Error al verificar preferencias existentes');
}
$existe = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmt);
if ($existe) {
// Actualizar registro existente
$query = "UPDATE $tabla SET [$nombre] = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
} else {
// Crear nuevo registro
$query = "INSERT INTO $tabla (id_usuario, [$nombre]) VALUES (?, ?)";
$stmt = sqlsrv_prepare($conn, $query, [$idUsuario, $valor]);
}
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception('Error al actualizar preferencia de catálogo');
}
sqlsrv_free_stmt($stmt);
break;
default:
throw new Exception('Tipo de operación no válido');
}
// Confirmar transacción
sqlsrv_commit($conn);
// Respuesta exitosa
echo json_encode([
'success' => true,
'message' => 'Preferencias actualizadas correctamente'
]);
} catch (Exception $e) {
// Revertir transacción en caso de error
sqlsrv_rollback($conn);
http_response_code(500);
echo json_encode([
'success' => false,
'message' => $e->getMessage()
]);
} finally {
sqlsrv_close($conn);
}
}