diff --git a/app/controllers/bitacoras.php b/app/controllers/bitacoras.php
index 7e5dbc5..18d22a9 100644
--- a/app/controllers/bitacoras.php
+++ b/app/controllers/bitacoras.php
@@ -17,13 +17,17 @@ function sistema()
}
$conn = getConnection();
- $sql = "SELECT bl.*, u.nombre
+ $sql = "SELECT bl.*, u.nombre
FROM bitacora_login bl
INNER JOIN usuarios_sistema u
- ON bl.id_usuario = u.id_usuario
+ ON bl.id_usuario = u.id_usuario
ORDER BY fecha DESC";
$stmt = sqlsrv_query($conn, $sql);
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
$registros = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$registros[] = $row;
@@ -34,7 +38,67 @@ function sistema()
function sistemaAgencia()
{
-
+ if (!isset($_SESSION['usuario_id']) || !in_array($_SESSION['tipo_usuario'], ['admin_agencia', 'agente_aduanal'])) {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+ $id_usuario = $_SESSION['usuario_id'];
+
+ // Obtener ID de agencia asociada
+ $sql_agencia = "SELECT id_agencia FROM agente_agencia WHERE id_agente = ? AND activo = 1";
+ $stmt_agencia = sqlsrv_query($conn, $sql_agencia, [$id_usuario]);
+
+ $id_agencia = null;
+ if ($stmt_agencia && ($row = sqlsrv_fetch_array($stmt_agencia, SQLSRV_FETCH_ASSOC))) {
+ $id_agencia = $row['id_agencia'];
+ }
+
+ if (!$id_agencia) {
+ die("⚠️ No se encontró una agencia activa asociada al usuario.");
+ }
+
+ // Obtener todos los usuarios ligados a la misma agencia (agentes + importadores)
+ $sql_usuarios = "
+ SELECT DISTINCT id_usuario FROM usuarios_sistema
+ WHERE id_usuario IN (
+ SELECT id_agente FROM agente_agencia WHERE id_agencia = ? AND activo = 1
+ UNION
+ SELECT id_importador FROM importador_agencia WHERE id_agencia = ? AND activo = 1
+ )
+ ";
+ $stmt_usuarios = sqlsrv_query($conn, $sql_usuarios, [$id_agencia, $id_agencia]);
+
+ $usuarios = [];
+ while ($row = sqlsrv_fetch_array($stmt_usuarios, SQLSRV_FETCH_ASSOC)) {
+ $usuarios[] = $row['id_usuario'];
+ }
+
+ // Consultar bitácora solo si hay usuarios ligados
+ $registros = [];
+ if (!empty($usuarios)) {
+ $placeholders = implode(',', array_fill(0, count($usuarios), '?'));
+
+ $sql_bitacora = "
+ SELECT bl.*, u.nombre
+ FROM bitacora_login bl
+ INNER JOIN usuarios_sistema u ON bl.id_usuario = u.id_usuario
+ WHERE bl.id_usuario IN ($placeholders)
+ ORDER BY fecha DESC
+ ";
+
+ $stmt = sqlsrv_query($conn, $sql_bitacora, $usuarios);
+
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ $registros[] = $row;
+ }
+ }
+
include __DIR__ . '/../../views/bitacoras/sistema_agencia.php';
}
@@ -46,24 +110,123 @@ function usuarios()
}
$conn = getConnection();
- $sql = "SELECT * FROM bitacora_usuarios ORDER BY fecha DESC";
+ $sql = "SELECT * FROM bitacora_usuarios ORDER BY fecha DESC";
$stmt = sqlsrv_query($conn, $sql);
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
$registros = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$registros[] = $row;
}
-
+
include __DIR__ . '/../../views/bitacoras/bitacora_usuarios.php';
}
-function vinculaciones()
+function vinculaciones()
{
+ if (!isset($_SESSION['usuario_id']) || !in_array($_SESSION['tipo_usuario'], ['admin_agencia', 'agente_aduanal'])) {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+ $usuario_id = $_SESSION['usuario_id'];
+
+ // 1. Obtener la agencia asociada al usuario actual
+ $sql_agencia = "SELECT id_agencia FROM agente_agencia WHERE id_agente = ? AND activo = 1";
+ $stmt_agencia = sqlsrv_query($conn, $sql_agencia, [$usuario_id]);
+
+ $id_agencia = null;
+ if ($stmt_agencia && ($row = sqlsrv_fetch_array($stmt_agencia, SQLSRV_FETCH_ASSOC))) {
+ $id_agencia = $row['id_agencia'];
+ }
+
+ if (!$id_agencia) {
+ die("⚠️ No se encontró una agencia activa asociada al usuario.");
+ }
+
+ // 2. Consulta de vinculaciones SOLO de esa agencia
+ $sql = "
+ SELECT ia.*,
+ u.nombre AS nombre_importador,
+ aa.nombre_agencia,
+ ap.nombre AS nombre_aprobador
+ FROM importador_agencia ia
+ INNER JOIN usuarios_sistema u ON ia.id_importador = u.id_usuario
+ INNER JOIN agencias_aduanales aa ON ia.id_agencia = aa.id_agencia
+ LEFT JOIN usuarios_sistema ap ON ia.aprobado_por = ap.id_usuario
+ WHERE ia.id_agencia = ?
+ ORDER BY ia.fecha_vinculacion DESC
+ ";
+
+ $stmt = sqlsrv_query($conn, $sql, [$id_agencia]);
+
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
+ $registros = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ if ($row['fecha_desvinculacion'] !== null) {
+ $row['accion'] = 'Desvinculación';
+ $row['fecha'] = $row['fecha_desvinculacion'];
+ } else {
+ $row['accion'] = 'Vinculación';
+ $row['fecha'] = $row['fecha_vinculacion'];
+ }
+ $registros[] = $row;
+ }
+
include __DIR__ . '/../../views/bitacoras/bitacora_vinculaciones.php';
}
function vinculacionesUsuario()
{
+ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+ $id_importador = $_SESSION['usuario_id'];
+
+ // Traer todas las relaciones del importador actual
+ $sql = "
+ SELECT ia.*,
+ u.nombre AS nombre_importador,
+ aa.nombre_agencia,
+ ap.nombre AS nombre_aprobador
+ FROM importador_agencia ia
+ INNER JOIN usuarios_sistema u ON ia.id_importador = u.id_usuario
+ INNER JOIN agencias_aduanales aa ON ia.id_agencia = aa.id_agencia
+ LEFT JOIN usuarios_sistema ap ON ia.aprobado_por = ap.id_usuario
+ WHERE ia.id_importador = ?
+ ORDER BY ia.fecha_vinculacion DESC
+ ";
+
+ $stmt = sqlsrv_query($conn, $sql, [$id_importador]);
+
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
+ $registros = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ // Determinar tipo de acción
+ if (!empty($row['fecha_desvinculacion'])) {
+ $row['accion'] = 'Desvinculación';
+ $row['fecha'] = $row['fecha_desvinculacion'];
+ } else {
+ $row['accion'] = 'Vinculación';
+ $row['fecha'] = $row['fecha_vinculacion'];
+ }
+
+ $registros[] = $row;
+ }
+
include __DIR__ . '/../../views/bitacoras/vinculaciones_usuario.php';
}
@@ -75,13 +238,19 @@ function agencias()
}
$conn = getConnection();
- $sql = "SELECT ba.*, u.nombre
- FROM bitacora_login ba
+ $sql = "SELECT ba.*, aa.nombre_agencia, u.nombre
+ FROM bitacora_agencias ba
+ INNER JOIN agencias_aduanales aa
+ ON ba.id_agencia = aa.id_agencia
INNER JOIN usuarios_sistema u
- ON bl.id_usuario = u.id_usuario
+ ON ba.realizado_por = u.id_usuario
ORDER BY fecha DESC";
$stmt = sqlsrv_query($conn, $sql);
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
$registros = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$registros[] = $row;
@@ -97,21 +266,24 @@ function miAcceso()
}
$conn = getConnection();
+ $id_usuario = $_SESSION['usuario_id'];
- $sql = "SELECT id_bitacora, usuario_id, accion, descripcion, fecha FROM bitacora_usuarios ORDER BY fecha DESC";
- $stmt = sqlsrv_query($conn, $sql);
+ $sql = "SELECT bl.id, bl.id_usuario, bl.email, bl.ip, bl.fecha, bl.exito, bl.detalle, u.nombre
+ FROM bitacora_login bl
+ INNER JOIN usuarios_sistema u
+ ON bl.id_usuario = u.id_usuario
+ WHERE bl.id_usuario = ?
+ ORDER BY bl.fecha DESC";
+ $stmt = sqlsrv_query($conn, $sql, [$id_usuario]);
- $cambios = [];
+ if ($stmt === false) {
+ die(print_r(sqlsrv_errors(), true));
+ }
+
+ $registros = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
- $cambios[] = $row;
+ $registros[] = $row;
}
include __DIR__ . '/../../views/bitacoras/bitacora_usuario.php';
-}
-
-function bitacoraUsuarios()
-{
-
-
- include __DIR__ . '/../../views/admin/bitacora_usuarios.php';
}
\ No newline at end of file
diff --git a/views/bitacoras/bitacora_agencias.php b/views/bitacoras/bitacora_agencias.php
index 38cd9c5..e9f067c 100644
--- a/views/bitacoras/bitacora_agencias.php
+++ b/views/bitacoras/bitacora_agencias.php
@@ -40,7 +40,7 @@
-
+
| ID |
Nombre |
@@ -53,9 +53,9 @@
| = htmlspecialchars($r['id_agencia'] ?? '') ?> |
- = htmlspecialchars(decrypt($r['nombre'] ?? '')) ?> |
+ = htmlspecialchars(decrypt($r['nombre_agencia'] ?? '')) ?> |
= htmlspecialchars($r['accion'] ?? '') ?> |
- = htmlspecialchars(decrypt($r['realizado_por'] ?? '')) ?> |
+ = htmlspecialchars(decrypt($r['nombre'] ?? '')) ?> |
= htmlspecialchars($r['fecha'] ? $r['fecha']->format('Y-m-d H:i:s') : '') ?> |
diff --git a/views/bitacoras/bitacora_sistema.php b/views/bitacoras/bitacora_sistema.php
index 49fd1d6..8daaa04 100644
--- a/views/bitacoras/bitacora_sistema.php
+++ b/views/bitacoras/bitacora_sistema.php
@@ -40,7 +40,7 @@
-
+
| ID |
Nombre |
diff --git a/views/bitacoras/bitacora_usuario.php b/views/bitacoras/bitacora_usuario.php
index 2cb9505..1f13aa9 100644
--- a/views/bitacoras/bitacora_usuario.php
+++ b/views/bitacoras/bitacora_usuario.php
@@ -35,8 +35,52 @@
-
👥 Acceso de Usuarios
+
👥 Mi Actividad
+
+
+
+
+
+
+ | ID |
+ Nombre |
+ Correo |
+ IP |
+ Fecha |
+ Estatus |
+ Detalles |
+
+
+
+
+
+ | = htmlspecialchars($r['id'] ?? '') ?> |
+ = htmlspecialchars(decrypt($r['nombre'] ?? '')) ?> |
+ = htmlspecialchars($r['email'] ?? '') ?> |
+ = htmlspecialchars($r['ip'] ?? '') ?> |
+ = $r['fecha']->format('Y-m-d H:i:s') ?> |
+
+ = $r['exito'] == 1 ? 'Éxito' : 'Fallido' ?>
+ |
+ = htmlspecialchars($r['detalle']) ?> |
+
+
+
+
+
+
+
+