Atajos de catálogos personalizables
This commit is contained in:
@@ -106,9 +106,9 @@ function aprobar_usuario()
|
||||
$email_encrypt = encrypt($email);
|
||||
|
||||
// Insertar en usuarios_sistema y obtener ID en la misma consulta
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por, preferencias_catalogos)
|
||||
OUTPUT INSERTED.id_usuario
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?, 1)";
|
||||
|
||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, [
|
||||
$nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
|
||||
@@ -140,6 +140,17 @@ function aprobar_usuario()
|
||||
throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// Insertar en preferencias de catalogos
|
||||
$sqlPref = "INSERT INTO preferencias_catalogos_usuario
|
||||
(id_usuario, locaciones, vinculacion, transportistas, transportes, choferes, proveedores,
|
||||
productos_frecuentes, solicitudes_importacion, expediente_electronico, configuracion, cerrar_sesion)
|
||||
VALUES (?, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)";
|
||||
$stmtPref = sqlsrv_query($conn, $sqlPref, [$id_usuario]);
|
||||
|
||||
if (!$stmtPref) {
|
||||
throw new Exception("Error al insertar preferencias de catalogos: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// Actualizar solicitud
|
||||
$sqlUpdate = "UPDATE solicitudes_importadores
|
||||
SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
|
||||
@@ -283,6 +294,7 @@ function guardar_usuario()
|
||||
|
||||
// 4. Insertar usuario
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||
OUTPUT INSERTED.id_usuario
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
|
||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
|
||||
@@ -293,12 +305,31 @@ function guardar_usuario()
|
||||
}
|
||||
|
||||
// 5. Obtener ID del nuevo usuario (para posibles tablas relacionadas)
|
||||
$sqlGetId = "SELECT SCOPE_IDENTITY() AS id_usuario";
|
||||
$stmtGetId = sqlsrv_query($conn, $sqlGetId);
|
||||
$idUsuarioRow = sqlsrv_fetch_array($stmtGetId, SQLSRV_FETCH_ASSOC);
|
||||
$idUsuarioRow = sqlsrv_fetch_array($stmtInsert, SQLSRV_FETCH_ASSOC);
|
||||
$id_usuario = $idUsuarioRow['id_usuario'] ?? null;
|
||||
|
||||
// 6. Enviar correo de bienvenida
|
||||
// 6. Insertar en informacion_general
|
||||
$sqlInfo = "INSERT INTO informacion_general
|
||||
(id_usuario, nombre, correo)
|
||||
VALUES (?, ?, ?)";
|
||||
$stmtInfo = sqlsrv_query($conn, $sqlInfo, [$id_usuario, $nombre, $email]);
|
||||
|
||||
if (!$stmtInfo) {
|
||||
throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// 7. Insertar en preferencias de catalogos
|
||||
$sqlPref = "INSERT INTO preferencias_catalogos_usuario
|
||||
(id_usuario, locaciones, vinculacion, transportistas, transportes, choferes, proveedores,
|
||||
productos_frecuentes, solicitudes_importacion, expediente_electronico, configuracion, cerrar_sesion)
|
||||
VALUES (?, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)";
|
||||
$stmtPref = sqlsrv_query($conn, $sqlPref, [$id_usuario]);
|
||||
|
||||
if (!$stmtPref) {
|
||||
throw new Exception("Error al insertar preferencias de catalogos: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// 8. Enviar correo de bienvenida
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
$mail->isSMTP();
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user