diff --git a/app/controllers/administrador.php b/app/controllers/administrador.php
index 629cf58..b88f283 100644
--- a/app/controllers/administrador.php
+++ b/app/controllers/administrador.php
@@ -54,127 +54,171 @@ function aprobar_usuario()
exit;
}
- // Obtener la solicitud
- $sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
- $stmt = sqlsrv_query($conn, $sql, [$id]);
- $solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
-
- if (!$solicitud) {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=request_not_found");
+ // Verificar sesión del usuario administrador
+ if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id'])) {
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=session_error");
exit;
}
- // Validar que no haya sido aprobada ya
- if ($solicitud['request_status'] === 'approved') {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=already_approved");
- exit;
- }
-
- // Preparar datos
- $nombre = decrypt($solicitud['company_name']);
- $email = $solicitud['email'];
- $tipo = 'importador';
-
- // Generar contraseña aleatoria
- $password_plain = bin2hex(random_bytes(5));
- $password_hash = password_hash($password_plain, PASSWORD_DEFAULT);
-
- // Encriptar datos sensibles
- $nombre_encrypt = encrypt($nombre);
- $email_encrypt = encrypt($email);
-
- // Insertar en usuarios_sistema
- $sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
- VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
- $stmtInsert = sqlsrv_query($conn, $sqlInsert, [
- $nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
- ]);
-
- if (!$stmtInsert) {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=save_failed");
- exit;
- }
-
- // insertar tabla de informacion general del nuevo usario
- // Obtener ID del nuevo usuario
- $sqlGetId = "SELECT SCOPE_IDENTITY() AS id_usuario";
- $stmtGetId = sqlsrv_query($conn, $sqlGetId);
- $idUsuarioRow = sqlsrv_fetch_array($stmtGetId, SQLSRV_FETCH_ASSOC);
- $id_usuario = $idUsuarioRow['id_usuario'] ?? null;
-
- if (!$id_usuario) {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=failed");
- exit;
- }
-
- // Insertar en informacion_general
- $rfc = decrypt($solicitud['rfc']);
- $telefono = $solicitud['phone'];
-
- $sqlInfo = "INSERT INTO informacion_general
- (id_usuario, nombre, rfc, correo, telefono)
- VALUES (?, ?, ?, ?, ?)";
- $stmtInfo = sqlsrv_query($conn, $sqlInfo, [
- $id_usuario, $nombre, $rfc, $email, $telefono ]);
-
- if (!$stmtInfo) {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=failed");
- exit;
- }
-
- // Actualizar solicitud
- $sqlUpdate = "UPDATE solicitudes_importadores
- SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
- WHERE request_id = ?";
- $stmtUpdate = sqlsrv_query($conn, $sqlUpdate, [$_SESSION['usuario_id'] ?? null, $id]);
-
- if (!$stmtUpdate) {
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=update_failed");
- exit;
- }
-
- // Enviar correo al importador
- $mail = new PHPMailer(true);
try {
- $mail->isSMTP();
- $mail->Host = 'secure.emailsrvr.com';
- $mail->SMTPAuth = true;
- $mail->Username = 'noreply@aduanasoft.com.mx';
- $mail->Password = $_ENV['SMTP_PASS'];
- $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
- $mail->Port = 587;
+ // Iniciar transacción
+ sqlsrv_begin_transaction($conn);
- $mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | Sistema Integral para Importadores de Hidrocarburos');
- $mail->addAddress($email);
- $mail->CharSet = 'UTF-8';
- $mail->isHTML(true);
- $mail->Subject = 'Tu acceso a la plataforma SIIH ha sido autorizado';
+ // Obtener la solicitud
+ $sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
+ $stmt = sqlsrv_query($conn, $sql, [$id]);
+
+ if (!$stmt) {
+ throw new Exception("Error en consulta de solicitud: " . print_r(sqlsrv_errors(), true));
+ }
- $mail->Body = "
-
-
-
-
¡Bienvenido a SIIH!
-
-
-
Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:
-
Correo: $email
-
Contraseña: $password_plain
-
📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.
-
Ir al sistema
-
-
- © " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
-
-
-
";
+ $solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+
+ if (!$solicitud) {
+ throw new Exception("Solicitud no encontrada");
+ }
+
+ // Validar que no haya sido aprobada ya
+ if ($solicitud['request_status'] === 'approved') {
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=already_approved");
+ exit;
+ }
+
+ // Preparar datos con validación
+ $nombre = !empty($solicitud['company_name']) ? decrypt($solicitud['company_name']) : null;
+ $email = $solicitud['email'] ?? null;
+ $rfc = !empty($solicitud['rfc']) ? decrypt($solicitud['rfc']) : null;
+ $telefono = $solicitud['phone'] ?? null;
+
+ // Validar datos requeridos
+ if (empty($nombre) || empty($email) || empty($rfc)) {
+ throw new Exception("Datos requeridos faltantes: nombre, email o RFC");
+ }
+
+ $tipo = 'importador';
+
+ // Generar contraseña aleatoria
+ $password_plain = bin2hex(random_bytes(5));
+ $password_hash = password_hash($password_plain, PASSWORD_DEFAULT);
+
+ // Encriptar datos sensibles
+ $nombre_encrypt = encrypt($nombre);
+ $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)
+ OUTPUT INSERTED.id_usuario
+ VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
+
+ $stmtInsert = sqlsrv_query($conn, $sqlInsert, [
+ $nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
+ ]);
+
+ if (!$stmtInsert) {
+ throw new Exception("Error al insertar usuario: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // Obtener el ID directamente del OUTPUT
+ $idUsuarioRow = sqlsrv_fetch_array($stmtInsert, SQLSRV_FETCH_ASSOC);
+ $id_usuario = $idUsuarioRow['id_usuario'] ?? null;
+
+ if (!$id_usuario) {
+ throw new Exception("No se pudo obtener el ID del usuario creado. ID obtenido: " . var_export($idUsuarioRow, true));
+ }
+
+ error_log("✓ Usuario creado exitosamente con ID: " . $id_usuario);
+
+ // Insertar en informacion_general
+ $sqlInfo = "INSERT INTO informacion_general
+ (id_usuario, nombre, rfc, correo, telefono)
+ VALUES (?, ?, ?, ?, ?)";
+ $stmtInfo = sqlsrv_query($conn, $sqlInfo, [
+ $id_usuario, $nombre, $rfc, $email, $telefono
+ ]);
+
+ if (!$stmtInfo) {
+ throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // Actualizar solicitud
+ $sqlUpdate = "UPDATE solicitudes_importadores
+ SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
+ WHERE request_id = ?";
+ $stmtUpdate = sqlsrv_query($conn, $sqlUpdate, [$_SESSION['usuario_id'], $id]);
+
+ if (!$stmtUpdate) {
+ throw new Exception("Error al actualizar solicitud: " . print_r(sqlsrv_errors(), true));
+ }
+
+ // Confirmar transacción
+ sqlsrv_commit($conn);
+
+ // Enviar correo al importador (fuera de la transacción)
+ $mail = new PHPMailer(true);
+ try {
+ $mail->isSMTP();
+ $mail->Host = 'secure.emailsrvr.com';
+ $mail->SMTPAuth = true;
+ $mail->Username = 'noreply@aduanasoft.com.mx';
+ $mail->Password = $_ENV['SMTP_PASS'] ?? '';
+ $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
+ $mail->Port = 587;
+
+ $mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | Sistema Integral para Importadores de Hidrocarburos');
+ $mail->addAddress($email);
+ $mail->CharSet = 'UTF-8';
+ $mail->isHTML(true);
+ $mail->Subject = 'Tu acceso a la plataforma SIIH ha sido autorizado';
+
+ $mail->Body = "
+
+
+
+
¡Bienvenido a SIIH!
+
+
+
Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:
+
Correo: $email
+
Contraseña: $password_plain
+
📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.
+
Ir al sistema
+
+
+ © " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
+
+
+
";
+
+ $mail->send();
+
+ // Éxito completo (usuario creado, solicitud actualizada y correo enviado)
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved");
+
+ } catch (Exception $mailException) {
+ // Error en el correo, pero el usuario fue creado exitosamente
+ error_log("Error al enviar correo de bienvenida: " . $mailException->getMessage());
+
+ // Redirigir con mensaje de éxito parcial
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved&warning=email_failed");
+ }
- $mail->send();
} catch (Exception $e) {
- error_log("Error al enviar correo: {$mail->ErrorInfo}");
+ // Revertir transacción
+ sqlsrv_rollback($conn);
+
+ // Log del error para debugging
+ error_log("Error al aprobar usuario: " . $e->getMessage());
+
+ // Redirigir con error específico basado en el tipo de error
+ if (strpos($e->getMessage(), 'información general') !== false) {
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=info_general_failed");
+ } elseif (strpos($e->getMessage(), 'ID del usuario') !== false) {
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=user_id_failed");
+ } else {
+ header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=process_failed");
+ }
}
- header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved");
exit;
}
@@ -208,10 +252,10 @@ function guardar_usuario()
$conn = getConnection();
// 1. Capturar y validar datos
- $nombre = trim($_POST['nombre'] ?? '');
- $email = trim($_POST['email'] ?? '');
- $password = $_POST['password'] ?? '';
- $tipo = $_POST['tipo_usuario'] ?? '';
+ $nombre = trim($_POST['nombre'] ?? '');
+ $email = trim($_POST['email'] ?? '');
+ $password = $_POST['password'] ?? '';
+ $tipo = $_POST['tipo_usuario'] ?? '';
if (empty($nombre) || empty($email) || empty($password) || empty($tipo)) {
header("Location: /IMPORTADORES/administrador/altaUsuarios?error=invalid_data");
@@ -241,7 +285,6 @@ function guardar_usuario()
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
-
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
if ($stmtInsert === false) {
@@ -776,7 +819,6 @@ function agenciasActivas()
include __DIR__ . '/../../views/admin/agencias_activas.php';
}
-
function suspender()
{
if (!($_SESSION['usuario_id'] ?? false)) {
@@ -993,45 +1035,6 @@ function suspenderAgencia()
exit;
}
-
-function bitacoraLogin()
-{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'super_admin') {
- header('Location: /IMPORTADORES/login');
- exit;
- }
-
- $conn = getConnection();
- $sql = "SELECT * FROM bitacora_login ORDER BY fecha DESC";
- $stmt = sqlsrv_query($conn, $sql);
-
- $registros = [];
- while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
- $registros[] = $row;
- }
-
- include __DIR__ . '/../../views/admin/bitacora_login.php';
-}
-
-function bitacoraUsuarios()
-{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'super_admin') {
- header('Location: /IMPORTADORES/login');
- exit;
- }
-
- $conn = getConnection();
- $sql = "SELECT * FROM bitacora_usuarios ORDER BY fecha DESC";
- $stmt = sqlsrv_query($conn, $sql);
-
- $registros = [];
- while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
- $registros[] = $row;
- }
-
- include __DIR__ . '/../../views/admin/bitacora_usuarios.php';
-}
-
function configuracion()
{
$conn = getConnection();
diff --git a/app/controllers/configuracion.php b/app/controllers/configuracion.php
index 4d284e6..e79022c 100644
--- a/app/controllers/configuracion.php
+++ b/app/controllers/configuracion.php
@@ -6,23 +6,82 @@ require_once __DIR__ . '/../helpers/crypto.php';
function index()
{
$conn = getConnection();
-
$id_usuario = $_SESSION['usuario_id'] ?? null;
if (!$id_usuario) {
die("ID de usuario no disponible en la sesión.");
}
- $sql = "SELECT * FROM informacion_general WHERE id_usuario = ?";
- $params = [$id_usuario];
+ // Primero obtenemos la información básica del usuario
+ $sql_usuario = "SELECT tipo_usuario, nombre, email FROM usuarios_sistema WHERE id_usuario = ?";
+ $stmt_usuario = sqlsrv_query($conn, $sql_usuario, [$id_usuario]);
- $stmt = sqlsrv_query($conn, $sql, $params);
-
- if ($stmt === false) {
+ if ($stmt_usuario === false) {
die(print_r(sqlsrv_errors(), true));
}
+
+ $usuario = sqlsrv_fetch_array($stmt_usuario, SQLSRV_FETCH_ASSOC);
+
+ if (!$usuario) {
+ die("Usuario no encontrado.");
+ }
- $datos = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
+ $datos = [
+ 'tipo_usuario' => trim($usuario['tipo_usuario']),
+ 'nombre' => $usuario['nombre'],
+ 'correo' => $usuario['email']
+ ];
+
+ // Dependiendo del tipo de usuario, obtenemos información adicional
+ switch (trim($usuario['tipo_usuario'])) { // Agregué trim() por si hay espacios
+ case 'importador':
+ $sql_importador = "SELECT * FROM informacion_general WHERE id_usuario = ?";
+ $stmt_importador = sqlsrv_query($conn, $sql_importador, [$id_usuario]);
+
+ if ($stmt_importador !== false) {
+ $info_importador = sqlsrv_fetch_array($stmt_importador, SQLSRV_FETCH_ASSOC);
+ if ($info_importador) {
+ $datos = array_merge($datos, $info_importador);
+ }
+ }
+ break;
+
+ case 'admin_agencia':
+ case 'agente_aduanal':
+ $sql_agencia = "
+ SELECT aa.id_agencia, aa.nombre_agencia, aa.rfc_agencia,
+ aa.direccion AS direccion_agencia, aa.telefono AS telefono_agencia,
+ aa.email AS email_agencia, aga.fecha_asignacion
+ FROM agente_agencia aga
+ INNER JOIN agencias_aduanales aa ON aga.id_agencia = aa.id_agencia
+ WHERE aga.id_agente = ? AND aga.activo = 1 AND aa.activo = 1
+ ";
+
+ $stmt_agencia = sqlsrv_query($conn, $sql_agencia, [$id_usuario]);
+
+ if ($stmt_agencia !== false) {
+ $info_agencia = sqlsrv_fetch_array($stmt_agencia, SQLSRV_FETCH_ASSOC);
+ if ($info_agencia) {
+ $datos = array_merge($datos, $info_agencia);
+ }
+ }
+ break;
+
+ case 'super_admin':
+ // Para super_admin, solo necesitamos la información básica que ya tenemos
+ $datos['es_super_admin'] = true; // Flag para identificar en la vista
+ break;
+
+ default:
+ break;
+ }
+
+ // Comentar la siguiente línea para ver el debug
+ // exit;
+
+ if (!isset($datos) || !is_array($datos)) {
+ $datos = [];
+ }
include __DIR__ . '/../../views/configuracion/dashboard_configuracion.php';
}
diff --git a/app/controllers/importadores.php b/app/controllers/importadores.php
index e82198b..2a50795 100644
--- a/app/controllers/importadores.php
+++ b/app/controllers/importadores.php
@@ -48,6 +48,108 @@ function lista()
include __DIR__ . '/../../views/locaciones/lista.php';
}
+
+function nuevaVinculacion()
+{
+ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+
+ $sql = "
+ SELECT
+ a.*,
+ s.estado AS estado_solicitud
+ FROM agencias_aduanales a
+ LEFT JOIN solicitudes_vinculacion s
+ ON s.id_agencia = a.id_agencia AND s.id_importador = ?
+ AND s.estado = 'PENDIENTE'
+ WHERE NOT EXISTS (
+ SELECT 1
+ FROM importador_agencia ia
+ WHERE ia.id_agencia = a.id_agencia
+ AND ia.id_importador = ?
+ AND ia.activo = 1
+ )
+ ORDER BY a.creado_en DESC
+ ";
+ $params = [$_SESSION['usuario_id'], $_SESSION['usuario_id']];
+ $stmt = sqlsrv_query($conn, $sql, $params);
+
+ $agencias = [];
+ while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
+ $agencias[] = $row;
+ }
+
+ include __DIR__ . '/../../views/vinculaciones/nueva.php';
+}
+
+function vincular()
+{
+ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+
+ $id_importador = $_SESSION['usuario_id'];
+ $id_agencia = (int) $_GET['id'];
+
+ // Verificar si ya existe una solicitud pendiente
+ $checkSql = "SELECT COUNT(*) AS total FROM solicitudes_vinculacion
+ WHERE id_importador = ? AND id_agencia = ? AND estado = 'PENDIENTE'";
+ $checkParams = [$id_importador, $id_agencia];
+ $checkStmt = sqlsrv_query($conn, $checkSql, $checkParams);
+
+ if ($checkStmt && $row = sqlsrv_fetch_array($checkStmt, SQLSRV_FETCH_ASSOC)) {
+ if ($row['total'] > 0) {
+ header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?error=pending_request');
+ exit;
+ }
+ }
+
+ // Insertar la nueva solicitud
+ $sql = "INSERT INTO solicitudes_vinculacion (id_importador, id_agencia, mensaje, estado, fecha_solicitud) VALUES (?, ?, 'Solicitud de vinculación', 'PENDIENTE', GETDATE())";
+ $params = [$id_importador, $id_agencia];
+ $stmt = sqlsrv_prepare($conn, $sql, $params);
+
+ if ($stmt && sqlsrv_execute($stmt)) {
+ header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?success=sended_request');
+ exit;
+ } else {
+ header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?error=failed_request');
+ exit;
+ }
+}
+
+function cancelarVinculacion()
+{
+ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
+ header('Location: /IMPORTADORES/login');
+ exit;
+ }
+
+ $conn = getConnection();
+
+ $id_importador = $_SESSION['usuario_id'];
+ $id_agencia = (int) $_GET['id'];
+
+ $sql = "UPDATE solicitudes_vinculacion
+ SET estado = 'CANCELADA', fecha_respuesta = GETDATE()
+ WHERE id_importador = ? AND id_agencia = ? AND estado = 'PENDIENTE'";
+
+ $params = [$id_importador, $id_agencia];
+ $stmt = sqlsrv_prepare($conn, $sql, $params);
+
+ if ($stmt && sqlsrv_execute($stmt)) {
+ header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?success=cancelled');
+ exit;
+ }
+}
+
function desvincularUsuario()
{
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
diff --git a/app/controllers/vinculaciones.php b/app/controllers/vinculaciones.php
index 19d5781..4741179 100644
--- a/app/controllers/vinculaciones.php
+++ b/app/controllers/vinculaciones.php
@@ -155,83 +155,7 @@ function vinculacionesAgencia()
return $b['fecha_vinculacion'] <=> $a['fecha_vinculacion'];
});
- include __DIR__ . '/../../views/vinculaciones/usuarios_vinculados.php';
-}
-
-function nuevaVinculacion()
-{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
- header('Location: /IMPORTADORES/login');
- exit;
- }
-
- $conn = getConnection();
-
- $sql = "
- SELECT
- a.*,
- s.estado AS estado_solicitud
- FROM agencias_aduanales a
- LEFT JOIN solicitudes_vinculacion s
- ON s.id_agencia = a.id_agencia AND s.id_importador = ?
- AND s.estado = 'PENDIENTE'
- WHERE NOT EXISTS (
- SELECT 1
- FROM importador_agencia ia
- WHERE ia.id_agencia = a.id_agencia
- AND ia.id_importador = ?
- AND ia.activo = 1
- )
- ORDER BY a.creado_en DESC
- ";
- $params = [$_SESSION['usuario_id'], $_SESSION['usuario_id']];
- $stmt = sqlsrv_query($conn, $sql, $params);
-
- $agencias = [];
- while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
- $agencias[] = $row;
- }
-
- include __DIR__ . '/../../views/vinculaciones/nueva.php';
-}
-
-function vincular()
-{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
- header('Location: /IMPORTADORES/login');
- exit;
- }
-
- $conn = getConnection();
-
- $id_importador = $_SESSION['usuario_id'];
- $id_agencia = (int) $_GET['id'];
-
- // Verificar si ya existe una solicitud pendiente
- $checkSql = "SELECT COUNT(*) AS total FROM solicitudes_vinculacion
- WHERE id_importador = ? AND id_agencia = ? AND estado = 'PENDIENTE'";
- $checkParams = [$id_importador, $id_agencia];
- $checkStmt = sqlsrv_query($conn, $checkSql, $checkParams);
-
- if ($checkStmt && $row = sqlsrv_fetch_array($checkStmt, SQLSRV_FETCH_ASSOC)) {
- if ($row['total'] > 0) {
- header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?error=pending_request');
- exit;
- }
- }
-
- // Insertar la nueva solicitud
- $sql = "INSERT INTO solicitudes_vinculacion (id_importador, id_agencia, mensaje, estado, fecha_solicitud) VALUES (?, ?, 'Solicitud de vinculación', 'PENDIENTE', GETDATE())";
- $params = [$id_importador, $id_agencia];
- $stmt = sqlsrv_prepare($conn, $sql, $params);
-
- if ($stmt && sqlsrv_execute($stmt)) {
- header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?success=sended_request');
- exit;
- } else {
- header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?error=failed_request');
- exit;
- }
+ include __DIR__ . '/../../views/vinculaciones/usuarios_vinculados.php';
}
function desvincularAgencia()
@@ -240,20 +164,20 @@ function desvincularAgencia()
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'admin_agencia') {
header('Location: /IMPORTADORES/login');
exit;
- }
+ }
// Verificar que se recibió el ID de la relación
$id_relacion = $_GET['id'] ?? null;
$tipo = $_GET['tipo'] ?? null;
if (!$id_relacion || !is_numeric($id_relacion)) {
- header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?error=invalid_id');
+ header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?error=invalid_id');
exit;
}
// Validar que el tipo sea válido
if (!in_array($tipo, ['importador', 'agente'])) {
- header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?error=invalid_type');
+ header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?error=invalid_type');
exit;
}
@@ -278,7 +202,7 @@ function desvincularAgencia()
WHERE ia.id_relacion = ? AND aa.id_administrador = ? AND u.tipo_usuario = 'importador'
";
$stmtVerificar = sqlsrv_query($conn, $sqlVerificar, [$id_relacion, $_SESSION['usuario_id']]);
- $relacion = sqlsrv_fetch_array($stmtVerificar, SQLSRV_FETCH_ASSOC);
+ $relacion = sqlsrv_fetch_array($stmtVerificar, SQLSRV_FETCH_ASSOC);
if (!$relacion) {
throw new Exception('Relación de importador no encontrada o no tienes permisos para desvincularla');
@@ -311,7 +235,7 @@ function desvincularAgencia()
WHERE aa.id_relacion = ? AND ag.id_administrador = ? AND u.tipo_usuario = 'agente_aduanal'
";
$stmtVerificar = sqlsrv_query($conn, $sqlVerificar, [$id_relacion, $_SESSION['usuario_id']]);
- $relacion = sqlsrv_fetch_array($stmtVerificar, SQLSRV_FETCH_ASSOC);
+ $relacion = sqlsrv_fetch_array($stmtVerificar, SQLSRV_FETCH_ASSOC);
if (!$relacion) {
throw new Exception('Relación de agente no encontrada o no tienes permisos para desvincularla');
@@ -324,8 +248,7 @@ function desvincularAgencia()
// Desactivar la relación de agente
$sqlDesactivar = "
UPDATE agente_agencia
- SET activo = 0,
- fecha_desvinculacion = GETDATE()
+ SET activo = 0
WHERE id_relacion = ?
";
}
@@ -339,42 +262,17 @@ function desvincularAgencia()
// Confirmar transacción
sqlsrv_commit($conn);
- header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?success=unlinked&tipo=' . $tipo);
+ header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?success=unlinked&tipo=' . $tipo);
exit;
} catch (Exception $e) {
// Revertir transacción en caso de error
sqlsrv_rollback($conn);
- header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?error=unlinked_failed&message=' . urlencode($e->getMessage()));
+ header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?error=unlinked_failed&message=' . urlencode($e->getMessage()));
exit;
}
}
-function cancelar()
-{
- if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
- header('Location: /IMPORTADORES/login');
- exit;
- }
-
- $conn = getConnection();
-
- $id_importador = $_SESSION['usuario_id'];
- $id_agencia = (int) $_GET['id'];
-
- $sql = "UPDATE solicitudes_vinculacion
- SET estado = 'CANCELADA', fecha_respuesta = GETDATE()
- WHERE id_importador = ? AND id_agencia = ? AND estado = 'PENDIENTE'";
-
- $params = [$id_importador, $id_agencia];
- $stmt = sqlsrv_prepare($conn, $sql, $params);
-
- if ($stmt && sqlsrv_execute($stmt)) {
- header('Location: /IMPORTADORES/vinculaciones/nuevaVinculacion?success=cancelled');
- exit;
- }
-}
-
function solicitudesVinculacion()
{
if (!($_SESSION['usuario_id'] ?? false) || $_SESSION['tipo_usuario'] !== 'admin_agencia') {
diff --git a/views/admin/aprobar_usuarios.php b/views/admin/aprobar_usuarios.php
index bec92d3..c2e7ffe 100644
--- a/views/admin/aprobar_usuarios.php
+++ b/views/admin/aprobar_usuarios.php
@@ -118,12 +118,20 @@
Swal.fire({ icon: 'error', title: 'Error al actualizar', text: 'No se pudo actualizar el estado del usuario.', confirmButtonColor: '#dc3545' });
- Swal.fire({ icon: 'error', title: 'Error inesperado', text: 'Ha ocurrido un error inesperado. Por favor, inténtalo nuevamente.', confirmButtonColor: '#dc3545' })
+ Swal.fire({ icon: 'error', title: 'Error inesperado', text: 'Ha ocurrido un error inesperado. Por favor, inténtalo nuevamente.', confirmButtonColor: '#dc3545' });
+
+ Swal.fire({ icon: 'error', title: 'Error de sesión', text: 'Tu sesión ha expirado. Por favor, inicia sesión nuevamente.', confirmButtonColor: '#dc3545' });
+
+ Swal.fire({ icon: 'error', title: 'Error en información general', text: 'Se creó el usuario pero falló al guardar la información adicional. Revisa los datos del formulario.', confirmButtonColor: '#dc3545' });
+
+ Swal.fire({ icon: 'error', title: 'Error interno', text: 'No se pudo obtener el ID del usuario creado. Contacta al soporte técnico.', confirmButtonColor: '#dc3545' });
+
+ Swal.fire({ icon: 'error', title: 'Error en el proceso', text: 'Ocurrió un error durante el proceso de aprobación. Verifica los logs del sistema.', confirmButtonColor: '#dc3545' });
Swal.fire({ icon: 'error', title: 'Error', text: 'Ha ocurrido un error inesperado. Por favor, inténtalo nuevamente.', confirmButtonColor: '#dc3545' });
-
+