Files
MVE/app/controllers/agentes.php
2025-07-18 12:21:26 -06:00

210 lines
8.2 KiB
PHP

<?php
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../helpers/session.php';
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../helpers/crypto.php';
require_once __DIR__ . '/../helpers/bitacoras.php';
require_once __DIR__ . '/../helpers/env.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
loadEnv();
function dashboard()
{
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') {
header("Location: /IMPORTADORES/login");
exit;
}
$idUsuario = $_SESSION['usuario_id'] ?? null;
include __DIR__ . '/../../views/agentes/dashboard_agentes.php';
}
function vinculados()
{
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') {
header('Location: /IMPORTADORES/login');
exit;
}
$conn = getConnection();
if (!$conn) {
die("Error de conexión: " . print_r(sqlsrv_errors(), true));
}
// Obtener la agencia del administrador actual
$sqlAgencia = "SELECT id_agencia FROM agente_agencia WHERE id_agente = ? AND activo = 1";
$stmtAgencia = sqlsrv_query($conn, $sqlAgencia, [$_SESSION['usuario_id']]);
// DEBUG: Verificar query de agencia
if ($stmtAgencia === false) {
die("Error en consulta de agencia: " . print_r(sqlsrv_errors(), true));
}
$rowAgencia = sqlsrv_fetch_array($stmtAgencia, SQLSRV_FETCH_ASSOC);
// DEBUG: Verificar si se encontró la agencia
if (!$rowAgencia) {
die("No se encontró agencia vinculada el agente ID: " . $_SESSION['usuario_id']);
}
$id_agencia = $rowAgencia['id_agencia'];
// Primero, verificar si hay registros en la tabla importador_agencia
$sqlCount = "SELECT COUNT(*) as total FROM importador_agencia WHERE id_agencia = ?";
$stmtCount = sqlsrv_query($conn, $sqlCount, [$id_agencia]);
$rowCount = sqlsrv_fetch_array($stmtCount, SQLSRV_FETCH_ASSOC);
// Verificar registros activos y aprobados
$sqlCountActive = "SELECT COUNT(*) as total FROM importador_agencia WHERE id_agencia = ? AND activo = 1 AND estado = 'APROBADO'";
$stmtCountActive = sqlsrv_query($conn, $sqlCountActive, [$id_agencia]);
$rowCountActive = sqlsrv_fetch_array($stmtCountActive, SQLSRV_FETCH_ASSOC);
// Solo usuarios vinculados ACTIVOS a MI agencia
$sql = "SELECT
ia.*, u.nombre as importador_nombre, ig.rfc, ig.telefono, aa.nombre_agencia
FROM importador_agencia ia
INNER JOIN usuarios_sistema u
ON ia.id_importador = u.id_usuario
LEFT JOIN informacion_general ig
ON u.id_usuario = ig.id_usuario
LEFT JOIN agencias_aduanales aa
ON ia.id_agencia = aa.id_agencia
WHERE ia.id_agencia = ?
AND ia.activo = 1
AND ia.estado = 'APROBADO'
ORDER BY ia.fecha_vinculacion DESC
";
$stmt = sqlsrv_query($conn, $sql, [$id_agencia]);
// DEBUG: Verificar query principal
if ($stmt === false) {
die("Error en consulta principal: " . print_r(sqlsrv_errors(), true));
}
$vinculados = [];
if ($stmt !== false) {
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$vinculados[] = $row;
}
}
include __DIR__ . '/../../views/vinculaciones/importadores_vinculados.php';
}
function desvincularAgente()
{
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') {
header('Location: /IMPORTADORES/login');
exit;
}
// Verificar que se recibió el ID de la relación
$id_relacion = $_GET['id'] ?? null;
if (!$id_relacion || !is_numeric($id_relacion)) {
header('Location: /IMPORTADORES/agentes/vinculados?error=invalid_id');
exit;
}
$conn = getConnection();
try {
// Iniciar transacción
sqlsrv_begin_transaction($conn);
// 1. Primero obtener la agencia del agente aduanal
$sqlAgenciaAgente = "SELECT id_agencia
FROM agente_agencia
WHERE id_agente = ?
AND activo = 1
";
$stmtAgenciaAgente = sqlsrv_query($conn, $sqlAgenciaAgente, [$_SESSION['usuario_id']]);
$agenciaAgente = sqlsrv_fetch_array($stmtAgenciaAgente, SQLSRV_FETCH_ASSOC);
if ($stmtAgenciaAgente === false) {
throw new Exception('Error en la consulta de agencia-agente: ' . print_r(sqlsrv_errors(), true));
}
$id_agencia_agente = $agenciaAgente['id_agencia'];
// 2. Verificar que la relación existe y pertenece a la MISMA agencia del agente
$sqlVerificar = "SELECT
ia.*, u.id_usuario, u.nombre as importador_nombre, aa.nombre_agencia
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
WHERE ia.id_relacion = ?
AND ia.id_agencia = ?
";
$stmtVerificar = sqlsrv_query($conn, $sqlVerificar, [$id_relacion, $id_agencia_agente]);
if ($stmtVerificar === false) {
throw new Exception('Error en la consulta de verificación: ' . print_r(sqlsrv_errors(), true));
}
$relacion = sqlsrv_fetch_array($stmtVerificar, SQLSRV_FETCH_ASSOC);
// 4. Desactivar la relación (no eliminar, mantener historial)
$sqlDesactivar = "UPDATE importador_agencia
SET activo = 0,
estado = 'DESVINCULADO'
WHERE id_relacion = ?
";
$stmtDesactivar = sqlsrv_query($conn, $sqlDesactivar, [$id_relacion]);
if ($stmtDesactivar === false) {
throw new Exception('Error al desactivar la relación: ' . print_r(sqlsrv_errors(), true));
}
// NUEVO: Verificar si el importador desvinculado tenía esta agencia como activa
$sqlVerificarAgenciaActiva = "SELECT id_agencia_en_uso
FROM usuarios_sistema
WHERE id_usuario = ?
AND id_agencia_en_uso = ?
";
$stmtVerificarActiva = sqlsrv_query($conn, $sqlVerificarAgenciaActiva,
[$relacion['id_importador'], $relacion['id_agencia']]);
if ($stmtVerificarActiva === false) {
throw new Exception('Error al verificar agencia activa: ' . print_r(sqlsrv_errors(), true));
}
if ($stmtVerificarActiva && sqlsrv_fetch_array($stmtVerificarActiva, SQLSRV_FETCH_ASSOC)) {
// Si tenía esta agencia como activa, quitársela
$sqlQuitarAgenciaActiva = "UPDATE usuarios_sistema
SET id_agencia_en_uso = NULL
WHERE id_usuario = ?
";
$stmtQuitarActiva = sqlsrv_query($conn, $sqlQuitarAgenciaActiva, [$relacion['id_importador']]);
if ($stmtQuitarActiva === false) {
throw new Exception('Error al actualizar la agencia activa del importador: ' . print_r(sqlsrv_errors(), true));
}
}
// Limpiar statements
sqlsrv_free_stmt($stmtVerificarActiva);
if (isset($stmtQuitarActiva)) {
sqlsrv_free_stmt($stmtQuitarActiva);
}
// Confirmar transacción
sqlsrv_commit($conn);
header('Location: /IMPORTADORES/agentes/vinculados?success=unlinked');
exit;
} catch (Exception $e) {
// Revertir transacción en caso de error
sqlsrv_rollback($conn);
error_log("Error desvinculando importador: " . $e->getMessage());
header('Location: /IMPORTADORES/agentes/vinculados?error=unlinked_failed');
exit;
}
}