diff --git a/app/controllers/preferencias.php b/app/controllers/preferencias.php
index e4f95e4..fed85a0 100644
--- a/app/controllers/preferencias.php
+++ b/app/controllers/preferencias.php
@@ -10,92 +10,316 @@ function index()
function notificaciones()
{
- $conn = getConnection();
+ $conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
- header("Location: /login");
+ header("Location: /IMPORTADORES/login");
exit;
}
// Obtener configuración general de notificaciones
- $query = "SELECT notificaciones, notificaciones_extra FROM usuarios_sistema WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ $query = "SELECT notificaciones, notificaciones_extra, 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));
}
- $notificaciones = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ?: ['notificaciones' => 0, 'notificaciones_extra' => 0];
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ if (!$usuario) {
+ die("Usuario no encontrado");
+ }
+
+ $notificaciones = [
+ 'notificaciones' => $usuario['notificaciones'] ?? 0,
+ 'notificaciones_extra' => $usuario['notificaciones_extra'] ?? 0
+ ];
+ $tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
- // Obtener preferencias específicas de notificaciones
- $query = "SELECT * FROM preferencias_notificaciones_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;
- }
+ switch ($tipoUsuario) {
+ case 'importador':
+ // Obtener preferencias específicas de notificaciones
+ $query = "SELECT * FROM preferencias_notificaciones_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;
+ }
- // Después de obtener $preferenciasRow, antes de crear el array $preferencias
- if ($preferenciasRow && isset($preferenciasRow['resumen_diario_hora'])) {
- // Formatear la hora para el input HTML
- $hora_obj = $preferenciasRow['resumen_diario_hora'];
- if ($hora_obj instanceof DateTime) {
- $preferenciasRow['resumen_diario_hora'] = $hora_obj->format('H:i');
- } elseif (is_string($hora_obj)) {
- // Si viene como string "08:00:00.0000000", extraer solo HH:MM
- $preferenciasRow['resumen_diario_hora'] = substr($hora_obj, 0, 5);
- }
- }
-
- // Si no existe registro, crear valores por defecto
- if (!$preferenciasRow) {
- $preferencias = [
- 'nuevas_solicitudes' => 0,
- 'registro_solicitud' => 0,
- 'cambio_estado' => 0,
- 'resumen_diario' => 0,
- 'alertas_tiempo' => 0,
- 'documentos_expediente' => 0,
- 'nuevos_archivos' => 0,
- 'intentos_fallidos' => 0,
- 'bloqueo_cuenta' => 0,
- 'resumen_diario_hora' => '08:00',
- 'resumen_diario_dias' => 'L-V'
- ];
- } else {
- $preferencias = $preferenciasRow;
- // Asegurar valores por defecto para campos de resumen si no existen
- $preferencias['resumen_diario_hora'] = $preferencias['resumen_diario_hora'] ?? '08:00';
- $preferencias['resumen_diario_dias'] = $preferencias['resumen_diario_dias'] ?? 'L-V';
- }
+ // Después de obtener $preferenciasRow, antes de crear el array $preferencias
+ if ($preferenciasRow && isset($preferenciasRow['resumen_diario_hora'])) {
+ // Formatear la hora para el input HTML
+ $hora_obj = $preferenciasRow['resumen_diario_hora'];
+ if ($hora_obj instanceof DateTime) {
+ $preferenciasRow['resumen_diario_hora'] = $hora_obj->format('H:i');
+ } elseif (is_string($hora_obj)) {
+ // Si viene como string "08:00:00.0000000", extraer solo HH:MM
+ $preferenciasRow['resumen_diario_hora'] = substr($hora_obj, 0, 5);
+ }
+ }
+
+ // Si no existe registro, crear valores por defecto
+ if (!$preferenciasRow) {
+ $preferencias = [
+ 'nuevas_solicitudes' => 0,
+ 'registro_solicitud' => 0,
+ 'cambio_estado' => 0,
+ 'resumen_diario' => 0,
+ 'alertas_tiempo' => 0,
+ 'documentos_expediente' => 0,
+ 'nuevos_archivos' => 0,
+ 'intentos_fallidos' => 0,
+ 'bloqueo_cuenta' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ];
+ } else {
+ $preferencias = $preferenciasRow;
+ // Asegurar valores por defecto para campos de resumen si no existen
+ $preferencias['resumen_diario_hora'] = $preferencias['resumen_diario_hora'] ?? '08:00';
+ $preferencias['resumen_diario_dias'] = $preferencias['resumen_diario_dias'] ?? 'L-V';
+ }
- // Obtener tipos de notificaciones disponibles
- $query = "SELECT nombre, descripcion FROM tipos_notificaciones ORDER BY nombre";
- $stmt = sqlsrv_query($conn, $query);
- if (!$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']] = $row['descripcion'];
- }
- sqlsrv_free_stmt($stmt);
+ // Obtener tipos de notificaciones disponibles
+ $query = "SELECT nombre, descripcion FROM tipos_notificaciones ORDER BY nombre";
+ $stmt = sqlsrv_query($conn, $query);
+ if (!$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']] = $row['descripcion'];
+ }
+ sqlsrv_free_stmt($stmt);
- // Obtener correo extra si existe
- $query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
- $correoExtra = '';
- if ($stmt && sqlsrv_execute($stmt)) {
- $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
- $correoExtra = $row ? $row['correo'] : '';
- sqlsrv_free_stmt($stmt);
+ // Obtener correo extra si existe
+ $query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ $correoExtra = '';
+ if ($stmt && sqlsrv_execute($stmt)) {
+ $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ $correoExtra = $row ? $row['correo'] : '';
+ sqlsrv_free_stmt($stmt);
+ }
+ break;
+ // case 'agente_agencia':
+ // Obtener preferencias específicas de notificaciones para agente
+ // $query = "SELECT * FROM preferencias_notificaciones_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;
+ // }
+
+ // Formatear hora si existe
+ // if ($preferenciasRow && isset($preferenciasRow['resumen_diario_hora'])) {
+ // $hora_obj = $preferenciasRow['resumen_diario_hora'];
+ // if ($hora_obj instanceof DateTime) {
+ // $preferenciasRow['resumen_diario_hora'] = $hora_obj->format('H:i');
+ // } elseif (is_string($hora_obj)) {
+ // $preferenciasRow['resumen_diario_hora'] = substr($hora_obj, 0, 5);
+ // }
+ // }
+
+ // Si no existe registro, crear valores por defecto para agente
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // 'nuevas_solicitudes' => 0,
+ // 'solicitudes_asignadas' => 0,
+ // 'cambio_estado' => 0,
+ // 'documentos_recibidos' => 0,
+ // 'documentos_rechazados' => 0,
+ // 'alertas_vencimiento' => 0,
+ // 'notificaciones_sistema' => 0,
+ // 'resumen_diario' => 0,
+ // 'alertas_tiempo' => 0,
+ // 'resumen_diario_hora' => '08:00',
+ // 'resumen_diario_dias' => 'L-V'
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // $preferencias['resumen_diario_hora'] = $preferencias['resumen_diario_hora'] ?? '08:00';
+ // $preferencias['resumen_diario_dias'] = $preferencias['resumen_diario_dias'] ?? 'L-V';
+ // }
+
+ // Obtener tipos de notificaciones específicas para agentes
+ // $query = "SELECT nombre, descripcion FROM tipos_notificaciones WHERE tipo_usuario = 'agente_aduanal' OR tipo_usuario IS NULL ORDER BY nombre";
+ // $stmt = sqlsrv_query($conn, $query);
+ // if (!$stmt) {
+ // die("Error al obtener tipos: " . print_r(sqlsrv_errors(), true));
+ // }
+
+ // $tipos = [];
+ // while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ // $tipos[$row['nombre']] = $row['descripcion'];
+ // }
+ // sqlsrv_free_stmt($stmt);
+
+ // Obtener correo extra si existe
+ // $query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // $correoExtra = '';
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // $correoExtra = $row ? $row['correo'] : '';
+ // sqlsrv_free_stmt($stmt);
+ // }
+ // break;
+ // case 'admin_agencia':
+ // Obtener preferencias específicas de notificaciones para admin de agencia
+ // $query = "SELECT * FROM preferencias_notificaciones_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;
+ // }
+
+ // Formatear hora si existe
+ // if ($preferenciasRow && isset($preferenciasRow['resumen_diario_hora'])) {
+ // $hora_obj = $preferenciasRow['resumen_diario_hora'];
+ // if ($hora_obj instanceof DateTime) {
+ // $preferenciasRow['resumen_diario_hora'] = $hora_obj->format('H:i');
+ // } elseif (is_string($hora_obj)) {
+ // $preferenciasRow['resumen_diario_hora'] = substr($hora_obj, 0, 5);
+ // }
+ // }
+
+ // Si no existe registro, crear valores por defecto para admin de agencia
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // 'nuevas_solicitudes' => 0,
+ // 'solicitudes_completadas' => 0,
+ // 'reportes_agentes' => 0,
+ // 'alertas_rendimiento' => 0,
+ // 'documentos_pendientes' => 0,
+ // 'notificaciones_sistema' => 0,
+ // 'alertas_vencimiento' => 0,
+ // 'resumen_semanal' => 0,
+ // 'resumen_mensual' => 0,
+ // 'resumen_diario' => 0,
+ // 'resumen_diario_hora' => '08:00',
+ // 'resumen_diario_dias' => 'L-V'
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // $preferencias['resumen_diario_hora'] = $preferencias['resumen_diario_hora'] ?? '08:00';
+ // $preferencias['resumen_diario_dias'] = $preferencias['resumen_diario_dias'] ?? 'L-V';
+ // }
+
+ // Obtener tipos de notificaciones específicas para admin de agencia
+ // $query = "SELECT nombre, descripcion FROM tipos_notificaciones WHERE tipo_usuario = 'admin_agencia' OR tipo_usuario IS NULL ORDER BY nombre";
+ // $stmt= sqlsrv_query($conn, $query);
+ // if (!$stmt) {
+ // die("Error al obtener tipos: " . print_r(sqlsrv_errors(), true));
+ // }
+
+ // $tipos = [];
+ // while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ // $tipos[$row['nombre']] = $row['descripcion'];
+ // }
+ // sqlsrv_free_stmt($stmt);
+
+ // Obtener correo extra si existe
+ // $query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // $correoExtra = '';
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // $correoExtra = $row ? $row['correo'] : '';
+ // sqlsrv_free_stmt($stmt);
+ // }
+ // break;
+ // case 'super_admin':
+ // Obtener preferencias específicas de notificaciones para super admin
+ // $query = "SELECT * FROM preferencias_notificaciones_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;
+ // }
+
+ // Formatear hora si existe
+ // if ($preferenciasRow && isset($preferenciasRow['resumen_diario_hora'])) {
+ // $hora_obj = $preferenciasRow['resumen_diario_hora'];
+ // if ($hora_obj instanceof DateTime) {
+ // $preferenciasRow['resumen_diario_hora'] = $hora_obj->format('H:i');
+ // } elseif (is_string($hora_obj)) {
+ // $preferenciasRow['resumen_diario_hora'] = substr($hora_obj, 0, 5);
+ // }
+ // }
+
+ // Si no existe registro, crear valores por defecto para super admin
+ // if (!$preferenciasRow) {
+ // $preferencias = [
+ // 'alertas_sistema' => 0,
+ // 'reportes_globales' => 0,
+ // 'nuevos_usuarios' => 0,
+ // 'alertas_seguridad' => 0,
+ // 'errores_sistema' => 0,
+ // 'notificaciones_criticas' => 0,
+ // 'estadisticas_uso' => 0,
+ // 'mantenimiento_sistema' => 0,
+ // 'resumen_diario' => 0,
+ // 'resumen_semanal' => 0,
+ // 'resumen_mensual' => 0,
+ // 'resumen_diario_hora' => '08:00',
+ // 'resumen_diario_dias' => 'L-V'
+ // ];
+ // } else {
+ // $preferencias = $preferenciasRow;
+ // $preferencias['resumen_diario_hora'] = $preferencias['resumen_diario_hora'] ?? '08:00';
+ // $preferencias['resumen_diario_dias'] = $preferencias['resumen_diario_dias'] ?? 'L-V';
+ // }
+
+ // Obtener tipos de notificaciones específicas para super admin
+ // $query = "SELECT nombre, descripcion FROM tipos_notificaciones WHERE tipo_usuario = 'super_admin' OR tipo_usuario IS NULL ORDER BY nombre";
+ // $stmt = sqlsrv_query($conn, $query);
+ // if (!$stmt) {
+ // die("Error al obtener tipos: " . print_r(sqlsrv_errors(), true));
+ // }
+
+ // $tipos = [];
+ // while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ // $tipos[$row['nombre']] = $row['descripcion'];
+ // }
+ // sqlsrv_free_stmt($stmt);
+
+ // Obtener correo extra si existe
+ // $query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
+ // $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ // $correoExtra = '';
+ // if ($stmt && sqlsrv_execute($stmt)) {
+ // $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ // $correoExtra = $row ? $row['correo'] : '';
+ // sqlsrv_free_stmt($stmt);
+ // }
+ // break;
+ default:
+ // Tipo de usuario no reconocido, usar configuración básica
+ $preferencias = [
+ 'notificaciones_generales' => 0,
+ 'resumen_diario' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ];
+
+ $tipos = [];
+ $correoExtra = '';
+ break;
}
sqlsrv_close($conn);
+
include __DIR__ . '/../../views/preferencias/notificaciones.php';
}
@@ -127,6 +351,19 @@ function guardarPreferenciasAjax()
$id_usuario = $_SESSION['usuario_id'];
try {
+ // Obtener tipo de usuario
+ $query = "SELECT tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
+ if (!$stmt || !sqlsrv_execute($stmt)) {
+ throw new Exception("Error al obtener tipo de usuario");
+ }
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ if (!$usuario) {
+ throw new Exception("Usuario no encontrado");
+ }
+ $tipo_usuario = $usuario['tipo_usuario'];
+ sqlsrv_free_stmt($stmt);
+
// Leer datos JSON del cuerpo de la petición
$input = json_decode(file_get_contents('php://input'), true);
@@ -155,13 +392,16 @@ function guardarPreferenciasAjax()
}
sqlsrv_free_stmt($stmt);
- // Si se desactivan las notificaciones, limpiar preferencias específicas
+ // Si se desactivan las notificaciones, limpiar preferencias específicas según tipo de usuario
if (!$notificaciones) {
- $query_delete = "DELETE FROM preferencias_notificaciones_usuario WHERE id_usuario = ?";
- $stmt_delete = sqlsrv_prepare($conn, $query_delete, [$id_usuario]);
- if ($stmt_delete) {
- sqlsrv_execute($stmt_delete);
- sqlsrv_free_stmt($stmt_delete);
+ $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]);
+ if ($stmt_delete) {
+ sqlsrv_execute($stmt_delete);
+ sqlsrv_free_stmt($stmt_delete);
+ }
}
}
@@ -211,15 +451,14 @@ function guardarPreferenciasAjax()
throw new Exception("Tipo de notificación no especificado");
}
- // Validar que el tipo de notificación es válido
- $tipos_validos = [
- 'nuevas_solicitudes', 'registro_solicitud', 'cambio_estado',
- 'resumen_diario', 'alertas_tiempo', 'documentos_expediente',
- 'nuevos_archivos', 'intentos_fallidos', 'bloqueo_cuenta'
- ];
+ // Obtener configuración específica según tipo de usuario
+ $config = getConfiguracionTipoUsuario($tipo_usuario);
+ $tabla_preferencias = $config['tabla'];
+ $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)) {
- throw new Exception("Tipo de notificación no válido");
+ throw new Exception("Tipo de notificación no válido para este tipo de usuario");
}
// Verificar que las notificaciones generales estén activadas
@@ -237,7 +476,7 @@ function guardarPreferenciasAjax()
}
// Verificar si existe el registro
- $query_exists = "SELECT COUNT(*) as count FROM preferencias_notificaciones_usuario WHERE id_usuario = ?";
+ $query_exists = "SELECT COUNT(*) as count FROM $tabla_preferencias WHERE id_usuario = ?";
$stmt_exists = sqlsrv_prepare($conn, $query_exists, [$id_usuario]);
$exists = false;
if ($stmt_exists && sqlsrv_execute($stmt_exists)) {
@@ -248,30 +487,18 @@ function guardarPreferenciasAjax()
if ($exists) {
// Actualizar el campo específico
- $query = "UPDATE preferencias_notificaciones_usuario SET [$tipo_nombre] = ? WHERE id_usuario = ?";
+ $query = "UPDATE $tabla_preferencias SET [$tipo_nombre] = ? WHERE id_usuario = ?";
$stmt = sqlsrv_prepare($conn, $query, [$valor, $id_usuario]);
} else {
- // Crear registro con valores por defecto y el campo específico
- $tipos_default = [
- 'nuevas_solicitudes' => 0,
- 'registro_solicitud' => 0,
- 'cambio_estado' => 0,
- 'resumen_diario' => 0,
- 'alertas_tiempo' => 0,
- 'documentos_expediente' => 0,
- 'nuevos_archivos' => 0,
- 'intentos_fallidos' => 0,
- 'bloqueo_cuenta' => 0,
- 'resumen_diario_hora' => '08:00',
- 'resumen_diario_dias' => 'L-V'
- ];
+ // Crear registro con valores por defecto específicos del tipo de usuario
+ $tipos_default = $config['valores_default'];
// Establecer el valor específico
$tipos_default[$tipo_nombre] = $valor;
$campos = '[' . implode('], [', array_keys($tipos_default)) . ']';
$placeholders = rtrim(str_repeat('?, ', count($tipos_default)), ', ');
- $query = "INSERT INTO preferencias_notificaciones_usuario (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);
@@ -297,12 +524,12 @@ function guardarPreferenciasAjax()
}
// Validar días
- $dias_validos = ['L-V', 'TODOS'];
+ $dias_validos = ['L-V', 'TODOS'];
$es_personalizado = !in_array($dias, $dias_validos);
if ($es_personalizado) {
// Validar formato personalizado (ej: "L,M,X" o "L,V,S,D")
- $dias_array = explode(',', $dias);
+ $dias_array = explode(',', $dias);
$dias_permitidos = ['L', 'M', 'X', 'J', 'V', 'S', 'D'];
foreach ($dias_array as $dia) {
@@ -313,13 +540,19 @@ function guardarPreferenciasAjax()
}
}
+ // Obtener tabla de preferencias según tipo de usuario
+ $tabla_preferencias = getTablaPreferencias($tipo_usuario);
+ if (!$tabla_preferencias) {
+ throw new Exception("Tipo de usuario no válido para configuración de resumen");
+ }
+
// Verificar que el resumen diario esté activado
- $query_check = "SELECT resumen_diario FROM preferencias_notificaciones_usuario WHERE id_usuario = ?";
- $stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
+ $query_check = "SELECT resumen_diario FROM $tabla_preferencias WHERE id_usuario = ?";
+ $stmt_check = sqlsrv_prepare($conn, $query_check, [$id_usuario]);
$resumen_activo = false;
if ($stmt_check && sqlsrv_execute($stmt_check)) {
- $row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
+ $row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);
$resumen_activo = $row && $row['resumen_diario'];
sqlsrv_free_stmt($stmt_check);
}
@@ -329,41 +562,35 @@ function guardarPreferenciasAjax()
}
// Verificar si existe el registro
- $query_exists = "SELECT COUNT(*) as count FROM preferencias_notificaciones_usuario WHERE id_usuario = ?";
- $stmt_exists = sqlsrv_prepare($conn, $query_exists, [$id_usuario]);
- $exists = false;
+ $query_exists = "SELECT COUNT(*) as count FROM $tabla_preferencias WHERE 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);
}
if ($exists) {
// Actualizar configuración del resumen
- $query = "UPDATE preferencias_notificaciones_usuario SET resumen_diario_hora = ?, resumen_diario_dias = ? WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$hora, $dias, $id_usuario]);
+ $query = "UPDATE $tabla_preferencias SET resumen_diario_hora = ?, resumen_diario_dias = ? WHERE id_usuario = ?";
+ $stmt = sqlsrv_prepare($conn, $query, [$hora, $dias, $id_usuario]);
} else {
- // Crear registro con valores por defecto
- $tipos_default = [
- 'nuevas_solicitudes' => 0,
- 'registro_solicitud' => 0,
- 'cambio_estado' => 0,
- 'resumen_diario' => 1, // Activado porque llegamos aquí desde su configuración
- 'alertas_tiempo' => 0,
- 'documentos_expediente' => 0,
- 'nuevos_archivos' => 0,
- 'intentos_fallidos' => 0,
- 'bloqueo_cuenta' => 0,
- 'resumen_diario_hora' => $hora,
- 'resumen_diario_dias' => $dias
- ];
+ // Crear registro con valores por defecto específicos del tipo de usuario
+ $config = getConfiguracionTipoUsuario($tipo_usuario);
+ $tipos_default = $config['valores_default'];
- $campos = '[' . implode('], [', array_keys($tipos_default)) . ']';
+ // Activar resumen diario y configurar hora/días
+ $tipos_default['resumen_diario'] = 1;
+ $tipos_default['resumen_diario_hora'] = $hora;
+ $tipos_default['resumen_diario_dias'] = $dias;
+
+ $campos = '[' . implode('], [', array_keys($tipos_default)) . ']';
$placeholders = rtrim(str_repeat('?, ', count($tipos_default)), ', ');
- $query = "INSERT INTO preferencias_notificaciones_usuario (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)) {
@@ -387,8 +614,8 @@ function guardarPreferenciasAjax()
echo json_encode([
'success' => true,
'message' => 'Preferencias guardadas automáticamente',
- 'tipo' => $tipo_cambio,
- 'data' => $response_data ?? []
+ 'tipo' => $tipo_cambio,
+ 'data' => $response_data ?? []
]);
} catch (Exception $e) {
@@ -399,26 +626,146 @@ function guardarPreferenciasAjax()
echo json_encode([
'success' => false,
'message' => $e->getMessage(),
- 'tipo' => $tipo_cambio ?? 'unknown'
+ 'tipo' => $tipo_cambio ?? 'unknown'
]);
}
exit;
}
+// Función auxiliar para obtener la tabla de preferencias según tipo de usuario
+function getTablaPreferencias($tipo_usuario) {
+ switch ($tipo_usuario) {
+ case 'importador':
+ return 'preferencias_notificaciones_usuario';
+ case 'agente_aduanal':
+ return 'preferencias_notificaciones_agente';
+ case 'admin_agencia':
+ return 'preferencias_notificaciones_agencia';
+ case 'super_admin':
+ return 'preferencias_notificaciones_admin';
+ default:
+ return null;
+ }
+}
+
+// Función auxiliar para obtener configuración específica por tipo de usuario
+function getConfiguracionTipoUsuario($tipo_usuario) {
+ switch ($tipo_usuario) {
+ case 'importador':
+ return [
+ 'tabla' => 'preferencias_notificaciones_usuario',
+ 'tipos_validos' => [
+ 'nuevas_solicitudes', 'registro_solicitud', 'cambio_estado',
+ 'resumen_diario', 'alertas_tiempo', 'documentos_expediente',
+ 'nuevos_archivos', 'intentos_fallidos', 'bloqueo_cuenta'
+ ],
+ 'valores_default' => [
+ 'nuevas_solicitudes' => 0,
+ 'registro_solicitud' => 0,
+ 'cambio_estado' => 0,
+ 'resumen_diario' => 0,
+ 'alertas_tiempo' => 0,
+ 'documentos_expediente' => 0,
+ 'nuevos_archivos' => 0,
+ 'intentos_fallidos' => 0,
+ 'bloqueo_cuenta' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ]
+ ];
+
+ case 'agente_aduanal':
+ return [
+ 'tabla' => 'preferencias_notificaciones_agente',
+ 'tipos_validos' => [
+ 'nuevas_solicitudes', 'solicitudes_asignadas', 'cambio_estado',
+ 'documentos_recibidos', 'documentos_rechazados', 'alertas_vencimiento',
+ 'notificaciones_sistema', 'resumen_diario', 'alertas_tiempo'
+ ],
+ 'valores_default' => [
+ 'nuevas_solicitudes' => 0,
+ 'solicitudes_asignadas' => 0,
+ 'cambio_estado' => 0,
+ 'documentos_recibidos' => 0,
+ 'documentos_rechazados' => 0,
+ 'alertas_vencimiento' => 0,
+ 'notificaciones_sistema' => 0,
+ 'resumen_diario' => 0,
+ 'alertas_tiempo' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ]
+ ];
+
+ case 'admin_agencia':
+ return [
+ 'tabla' => 'preferencias_notificaciones_agencia',
+ 'tipos_validos' => [
+ 'nuevas_solicitudes', 'solicitudes_completadas', 'reportes_agentes',
+ 'alertas_rendimiento', 'documentos_pendientes', 'notificaciones_sistema',
+ 'alertas_vencimiento', 'resumen_semanal', 'resumen_mensual', 'resumen_diario'
+ ],
+ 'valores_default' => [
+ 'nuevas_solicitudes' => 0,
+ 'solicitudes_completadas' => 0,
+ 'reportes_agentes' => 0,
+ 'alertas_rendimiento' => 0,
+ 'documentos_pendientes' => 0,
+ 'notificaciones_sistema' => 0,
+ 'alertas_vencimiento' => 0,
+ 'resumen_semanal' => 0,
+ 'resumen_mensual' => 0,
+ 'resumen_diario' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ]
+ ];
+
+ case 'super_admin':
+ return [
+ 'tabla' => 'preferencias_notificaciones_admin',
+ 'tipos_validos' => [
+ 'alertas_sistema', 'reportes_globales', 'nuevos_usuarios',
+ 'alertas_seguridad', 'errores_sistema', 'notificaciones_criticas',
+ 'estadisticas_uso', 'mantenimiento_sistema', 'resumen_diario',
+ 'resumen_semanal', 'resumen_mensual'
+ ],
+ 'valores_default' => [
+ 'alertas_sistema' => 0,
+ 'reportes_globales' => 0,
+ 'nuevos_usuarios' => 0,
+ 'alertas_seguridad' => 0,
+ 'errores_sistema' => 0,
+ 'notificaciones_criticas' => 0,
+ 'estadisticas_uso' => 0,
+ 'mantenimiento_sistema' => 0,
+ 'resumen_diario' => 0,
+ 'resumen_semanal' => 0,
+ 'resumen_mensual' => 0,
+ 'resumen_diario_hora' => '08:00',
+ 'resumen_diario_dias' => 'L-V'
+ ]
+ ];
+
+ default:
+ return null;
+ }
+}
+
// Función auxiliar para obtener el correo extra de un usuario (útil para el sistema de notificaciones)
function obtenerCorreoExtra($id_usuario)
{
- $conn = getConnection();
+ $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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$correo = null;
if ($stmt && sqlsrv_execute($stmt)) {
- $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$correo = $row ? $row['correo'] : null;
sqlsrv_free_stmt($stmt);
}
@@ -433,7 +780,7 @@ 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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
sqlsrv_close($conn);
return null;
@@ -448,7 +795,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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$preferencias = null;
if ($stmt && sqlsrv_execute($stmt)) {
$preferencias = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
@@ -459,7 +806,7 @@ function obtenerPreferenciasNotificacion($id_usuario)
$correo_extra = null;
if ($config['notificaciones_extra']) {
$query = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
if ($stmt && sqlsrv_execute($stmt)) {
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$correo_extra = $row ? $row['correo'] : null;
@@ -470,8 +817,8 @@ function obtenerPreferenciasNotificacion($id_usuario)
sqlsrv_close($conn);
return [
'config_general' => $config,
- 'preferencias' => $preferencias,
- 'correo_extra' => $correo_extra
+ 'preferencias' => $preferencias,
+ 'correo_extra' => $correo_extra
];
}
@@ -496,7 +843,7 @@ 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();
+ $conn = getConnection();
$query = "
SELECT pnu.resumen_diario, pnu.resumen_diario_hora, pnu.resumen_diario_dias
@@ -505,7 +852,7 @@ function obtenerConfigResumenDiario($id_usuario)
WHERE pnu.id_usuario = ? AND us.notificaciones = 1 AND pnu.resumen_diario = 1
";
- $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
+ $stmt = sqlsrv_prepare($conn, $query, [$id_usuario]);
$config = null;
if ($stmt && sqlsrv_execute($stmt)) {
@@ -526,7 +873,7 @@ function obtenerConfigResumenDiario($id_usuario)
// Función auxiliar para verificar si hoy es día de envío de resumen según la configuración del usuario
function esDiaResumen($config_dias)
{
- $hoy = date('N'); // 1=Lunes, 7=Domingo
+ $hoy = date('N'); // 1=Lunes, 7=Domingo
$dia_letra = ['', 'L', 'M', 'X', 'J', 'V', 'S', 'D'][$hoy];
switch ($config_dias) {
@@ -543,7 +890,7 @@ function esDiaResumen($config_dias)
function catalogos()
{
- $conn = getConnection();
+ $conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
@@ -613,8 +960,8 @@ function catalogos()
// $preferencias = [
// Aquí se definirán los campos específicos para agente aduanal
// cuando se creen las tablas correspondientes
- // 'configuracion' => 0,
- // 'cerrar_sesion' => 0
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
@@ -636,8 +983,8 @@ function catalogos()
// $preferencias = [
// Aquí se definirán los campos específicos para admin agencia
// cuando se creen las tablas correspondientes
- // 'configuracion' => 0,
- // 'cerrar_sesion' => 0
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
@@ -659,8 +1006,8 @@ function catalogos()
// $preferencias = [
// Aquí se definirán los campos específicos para super admin
// cuando se creen las tablas correspondientes
- // 'configuracion' => 0,
- // 'cerrar_sesion' => 0
+ // 'configuracion' => 0,
+ // 'cerrar_sesion' => 0
// ];
// } else {
// $preferencias = $preferenciasRow;
@@ -670,8 +1017,8 @@ function catalogos()
default:
// Tipo de usuario no reconocido, usar valores por defecto mínimos
$preferencias = [
- 'configuracion' => 0,
- 'cerrar_sesion' => 0
+ 'configuracion' => 0,
+ 'cerrar_sesion' => 0
];
break;
}
@@ -688,7 +1035,7 @@ function catalogos()
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$tipos[$row['nombre']] = [
'descripcion' => $row['descripcion'],
- 'color' => $row['color']
+ 'color' => $row['color']
];
}
sqlsrv_free_stmt($stmt);
@@ -716,7 +1063,7 @@ function guardarCatalogosAjax()
exit;
}
- $conn = getConnection();
+ $conn = getConnection();
$idUsuario = $_SESSION['usuario_id'] ?? null;
if (!$idUsuario) {
@@ -727,13 +1074,13 @@ function guardarCatalogosAjax()
// Obtener tipo de usuario
$query = "SELECT tipo_usuario FROM usuarios_sistema WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
+ $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);
+ $usuario = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$tipoUsuario = $usuario['tipo_usuario'] ?? 'importador';
sqlsrv_free_stmt($stmt);
@@ -746,7 +1093,7 @@ function guardarCatalogosAjax()
$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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception('Error al actualizar preferencias generales');
@@ -761,7 +1108,7 @@ function guardarCatalogosAjax()
}
$nombre = $input['nombre'];
- $valor = $input['valor'] ? 1 : 0;
+ $valor = $input['valor'] ? 1 : 0;
// Determinar la tabla según el tipo de usuario
$tabla = '';
@@ -784,7 +1131,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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario]);
if (!$stmt || !sqlsrv_execute($stmt)) {
throw new Exception('Error al verificar preferencias existentes');
}
@@ -795,11 +1142,11 @@ function guardarCatalogosAjax()
if ($existe) {
// Actualizar registro existente
$query = "UPDATE $tabla SET [$nombre] = ? WHERE id_usuario = ?";
- $stmt = sqlsrv_prepare($conn, $query, [$valor, $idUsuario]);
+ $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]);
+ $stmt = sqlsrv_prepare($conn, $query, [$idUsuario, $valor]);
}
if (!$stmt || !sqlsrv_execute($stmt)) {
diff --git a/views/admin/agencias_activas.php b/views/admin/agencias_activas.php
index a419ecf..1501777 100644
--- a/views/admin/agencias_activas.php
+++ b/views/admin/agencias_activas.php
@@ -13,6 +13,10 @@
+
+
+
+
-
✅ Agencias Activas
+
✅ Agencias Activas
-
+
@@ -68,7 +98,7 @@
| = htmlspecialchars($ag['id_administrador']) ?> |
- Suspender
+ Suspender
|
diff --git a/views/admin/alta_agencias.php b/views/admin/alta_agencias.php
index 22f443a..284e03f 100644
--- a/views/admin/alta_agencias.php
+++ b/views/admin/alta_agencias.php
@@ -9,6 +9,10 @@
+
+
+
+
@@ -34,10 +64,10 @@
-
🏪 Alta de Agencias Aduanales
+
🏪 Alta de Agencias Aduanales
-
+
diff --git a/views/admin/alta_usuarios.php b/views/admin/alta_usuarios.php
index 4b60756..4fb211d 100644
--- a/views/admin/alta_usuarios.php
+++ b/views/admin/alta_usuarios.php
@@ -13,6 +13,10 @@
+
+
+
+
@@ -38,9 +68,9 @@
-
👥 Alta de Usuarios
+
👥 Alta de Usuarios
-
+
-
+
@@ -93,7 +123,7 @@
= isset($u['creado_en']) && $u['creado_en'] instanceof DateTime ? $u['creado_en']->format('Y-m-d H:i') : '' ?> |
- Suspender
+ Suspender
|
diff --git a/views/admin/aprobar_agencias.php b/views/admin/aprobar_agencias.php
index 5b81f6f..940da05 100644
--- a/views/admin/aprobar_agencias.php
+++ b/views/admin/aprobar_agencias.php
@@ -8,6 +8,10 @@
+
+
+
+
@@ -33,10 +63,10 @@
-
✅ Aprobación de Agencias Aduanales
+
✅ Aprobación de Agencias Aduanales
-
+
🏪 Agencias Solicitantes
@@ -66,13 +96,13 @@
| = $s['request_date'] ? $s['request_date']->format('Y-m-d H:i') : '' ?> |
- Ver PDF
+ Ver PDF
No adjunto
|
- Aprobar
+ Aprobar
|
diff --git a/views/admin/aprobar_usuarios.php b/views/admin/aprobar_usuarios.php
index 557b47d..af9791e 100644
--- a/views/admin/aprobar_usuarios.php
+++ b/views/admin/aprobar_usuarios.php
@@ -12,6 +12,10 @@
+
+
+
+
@@ -37,9 +67,9 @@
-
✅ Aprobación de Usuarios
+
✅ Aprobación de Usuarios
-
+
👥 Usuarios Solicitantes
@@ -67,13 +97,13 @@
| = $s['request_date'] ? $s['request_date']->format('Y-m-d H:i') : '' ?> |
- Ver PDF
+ Ver PDF
No adjunto
|
- Aprobar
+ Aprobar
|
diff --git a/views/admin/dashboard_admin.php b/views/admin/dashboard_admin.php
index 02735f6..0f7ed22 100644
--- a/views/admin/dashboard_admin.php
+++ b/views/admin/dashboard_admin.php
@@ -8,6 +8,10 @@
+
+
+
+
-
📦 Panel de Administrador
+
📦 Panel de Administrador
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Configuración
+
Administra los datos de tu agencia.
+
+ Configurar
+
+
+
+
+
+
+
Cerrar sesión
+
Salir del sistema de forma segura.
+
Logout
+
+
+
-