This commit is contained in:
2025-07-09 16:14:22 -06:00
parent 91b6806898
commit 287ad27274
39 changed files with 2517 additions and 2000 deletions

View File

@@ -10,7 +10,8 @@ function index()
function notificaciones()
{
$conn = getConnection();
$conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
@@ -353,7 +354,7 @@ function guardarPreferenciasAjax()
try {
// Obtener tipo de usuario
$query = "SELECT tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception("Error al obtener tipo de usuario");
}
@@ -385,7 +386,7 @@ function guardarPreferenciasAjax()
$notificaciones_extra = $notificaciones ? ($input['notificaciones_extra'] ?? 0) : 0;
$query = "UPDATE usuarios_sistema SET notificaciones = ?, notificaciones_extra = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$notificaciones, $notificaciones_extra, $id_usuario]);
$stmt = sqlsrv_prepare($conn, $query, [$notificaciones, $notificaciones_extra, $id_usuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception("Error al actualizar configuración general");
@@ -397,7 +398,7 @@ function guardarPreferenciasAjax()
$tabla_preferencias = getTablaPreferencias($tipo_usuario);
if ($tabla_preferencias) {
$query_delete = "DELETE FROM $tabla_preferencias WHERE id_usuario = ?";
$stmt_delete = sqlsrv_prepare($conn, $query_delete, [$id_usuario]);
$stmt_delete = sqlsrv_prepare($conn, $query_delete, [$id_usuario]);
if ($stmt_delete) {
sqlsrv_execute($stmt_delete);
sqlsrv_free_stmt($stmt_delete);
@@ -406,7 +407,7 @@ function guardarPreferenciasAjax()
}
$response_data = [
'notificaciones' => $notificaciones,
'notificaciones' => $notificaciones,
'notificaciones_extra' => $notificaciones_extra
];
break;
@@ -417,7 +418,7 @@ function guardarPreferenciasAjax()
// Validar que existe correo extra si se quiere activar
if ($notificaciones_extra) {
$query_check = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
$stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
$stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
if ($stmt_check && sqlsrv_execute($stmt_check)) {
$row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmt_check);
@@ -431,7 +432,7 @@ function guardarPreferenciasAjax()
}
$query = "UPDATE usuarios_sistema SET notificaciones_extra = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$notificaciones_extra, $id_usuario]);
$stmt = sqlsrv_prepare($conn, $query, [$notificaciones_extra, $id_usuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception("Error al actualizar configuración de correo extra");
@@ -445,16 +446,16 @@ function guardarPreferenciasAjax()
case 'tipo_notificacion':
$tipo_nombre = $input['nombre'] ?? '';
$valor = $input['valor'] ? 1 : 0;
$valor = $input['valor'] ? 1 : 0;
if (empty($tipo_nombre)) {
throw new Exception("Tipo de notificación no especificado");
}
// Obtener configuración específica según tipo de usuario
$config = getConfiguracionTipoUsuario($tipo_usuario);
$config = getConfiguracionTipoUsuario($tipo_usuario);
$tabla_preferencias = $config['tabla'];
$tipos_validos = $config['tipos_validos'];
$tipos_validos = $config['tipos_validos'];
// Validar que el tipo de notificación es válido para este tipo de usuario
if (!in_array($tipo_nombre, $tipos_validos)) {
@@ -463,7 +464,7 @@ function guardarPreferenciasAjax()
// Verificar que las notificaciones generales estén activadas
$query_check = "SELECT notificaciones FROM usuarios_sistema WHERE id_usuario = ?";
$stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
$stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
if ($stmt_check && sqlsrv_execute($stmt_check)) {
$row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmt_check);
@@ -477,10 +478,11 @@ function guardarPreferenciasAjax()
// Verificar si existe el registro
$query_exists = "SELECT COUNT(*) as count FROM $tabla_preferencias WHERE id_usuario = ?";
$stmt_exists = sqlsrv_prepare($conn, $query_exists, [$id_usuario]);
$stmt_exists = sqlsrv_prepare($conn, $query_exists, [$id_usuario]);
$exists = false;
if ($stmt_exists && sqlsrv_execute($stmt_exists)) {
$row = sqlsrv_fetch_array($stmt_exists, SQLSRV_FETCH_ASSOC);
$row = sqlsrv_fetch_array($stmt_exists, SQLSRV_FETCH_ASSOC);
$exists = $row['count'] > 0;
sqlsrv_free_stmt($stmt_exists);
}
@@ -488,7 +490,7 @@ function guardarPreferenciasAjax()
if ($exists) {
// Actualizar el campo específico
$query = "UPDATE $tabla_preferencias SET [$tipo_nombre] = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$valor, $id_usuario]);
$stmt = sqlsrv_prepare($conn, $query, [$valor, $id_usuario]);
} else {
// Crear registro con valores por defecto específicos del tipo de usuario
$tipos_default = $config['valores_default'];
@@ -496,12 +498,12 @@ function guardarPreferenciasAjax()
// Establecer el valor específico
$tipos_default[$tipo_nombre] = $valor;
$campos = '[' . implode('], [', array_keys($tipos_default)) . ']';
$campos = '[' . implode('], [', array_keys($tipos_default)) . ']';
$placeholders = rtrim(str_repeat('?, ', count($tipos_default)), ', ');
$query = "INSERT INTO $tabla_preferencias (id_usuario, $campos) VALUES (?, $placeholders)";
$query = "INSERT INTO $tabla_preferencias (id_usuario, $campos) VALUES (?, $placeholders)";
$params = array_merge([$id_usuario], array_values($tipos_default));
$stmt = sqlsrv_prepare($conn, $query, $params);
$stmt = sqlsrv_prepare($conn, $query, $params);
}
if (!$stmt || !sqlsrv_execute($stmt)) {
@@ -577,7 +579,7 @@ function guardarPreferenciasAjax()
$stmt = sqlsrv_prepare($conn, $query, [$hora, $dias, $id_usuario]);
} else {
// Crear registro con valores por defecto específicos del tipo de usuario
$config = getConfiguracionTipoUsuario($tipo_usuario);
$config = getConfiguracionTipoUsuario($tipo_usuario);
$tipos_default = $config['valores_default'];
// Activar resumen diario y configurar hora/días
@@ -755,20 +757,24 @@ function getConfiguracionTipoUsuario($tipo_usuario) {
// Función auxiliar para obtener el correo extra de un usuario (útil para el sistema de notificaciones)
function obtenerCorreoExtra($id_usuario)
{
$conn = getConnection();
$query = "
SELECT ce.correo
FROM correo_extra ce
INNER JOIN usuarios_sistema us ON ce.id_usuario = us.id_usuario
WHERE ce.id_usuario = ? AND us.notificaciones_extra = 1
";
$conn = getConnection();
$query = "SELECT ce.correo
FROM correo_extra ce
INNER JOIN usuarios_sistema us
ON ce.id_usuario = us.id_usuario
WHERE ce.id_usuario = ?
AND us.notificaciones_extra = 1
";
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$correo = null;
if ($stmt && sqlsrv_execute($stmt)) {
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$correo = $row ? $row['correo'] : null;
sqlsrv_free_stmt($stmt);
}
sqlsrv_close($conn);
return $correo;
}
@@ -781,10 +787,12 @@ function obtenerPreferenciasNotificacion($id_usuario)
// Obtener configuración general
$query = "SELECT notificaciones, notificaciones_extra FROM usuarios_sistema WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
sqlsrv_close($conn);
return null;
}
$config = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
sqlsrv_free_stmt($stmt);
@@ -796,6 +804,7 @@ function obtenerPreferenciasNotificacion($id_usuario)
// Obtener preferencias específicas
$query = "SELECT * FROM preferencias_notificaciones_usuario WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$preferencias = null;
if ($stmt && sqlsrv_execute($stmt)) {
$preferencias = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
@@ -843,18 +852,20 @@ function debeRecibirNotificacion($id_usuario, $tipo_notificacion)
// Función auxiliar para obtener la configuración del resumen diario de un usuario
function obtenerConfigResumenDiario($id_usuario)
{
$conn = getConnection();
$query = "
SELECT pnu.resumen_diario, pnu.resumen_diario_hora, pnu.resumen_diario_dias
FROM preferencias_notificaciones_usuario pnu
INNER JOIN usuarios_sistema us ON pnu.id_usuario = us.id_usuario
WHERE pnu.id_usuario = ? AND us.notificaciones = 1 AND pnu.resumen_diario = 1
";
$conn = getConnection();
$query = "SELECT
pnu.resumen_diario, pnu.resumen_diario_hora, pnu.resumen_diario_dias
FROM preferencias_notificaciones_usuario pnu
INNER JOIN usuarios_sistema us
ON pnu.id_usuario = us.id_usuario
WHERE pnu.id_usuario = ?
AND us.notificaciones = 1
AND pnu.resumen_diario = 1
";
$stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$config = null;
if ($stmt && sqlsrv_execute($stmt)) {
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
if ($row) {
@@ -890,7 +901,8 @@ function esDiaResumen($config_dias)
function catalogos()
{
$conn = getConnection();
$conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
@@ -901,16 +913,18 @@ function catalogos()
// 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';
$tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
// Obtener preferencias específicas según el tipo de usuario
@@ -949,22 +963,22 @@ function catalogos()
// $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);
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// $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
// ];
// $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;
// $preferencias = $preferenciasRow;
// }
// break;
@@ -972,22 +986,22 @@ function catalogos()
// $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);
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// $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
// ];
// $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;
// $preferencias = $preferenciasRow;
// }
// break;
@@ -995,22 +1009,22 @@ function catalogos()
// $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);
// $preferenciasRow = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// sqlsrv_free_stmt($stmt);
// } else {
// $preferenciasRow = false;
// $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
// ];
// $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;
// $preferencias = $preferenciasRow;
// }
// break;
@@ -1026,6 +1040,7 @@ function catalogos()
// 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));
}
@@ -1063,7 +1078,8 @@ function guardarCatalogosAjax()
exit;
}
$conn = getConnection();
$conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
@@ -1075,11 +1091,13 @@ function guardarCatalogosAjax()
// 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);
@@ -1091,13 +1109,13 @@ function guardarCatalogosAjax()
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;
@@ -1132,6 +1150,7 @@ function guardarCatalogosAjax()
// 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');
}