Correcciones

This commit is contained in:
2025-06-27 07:30:16 -06:00
parent 4416fe6f20
commit 3da996350c
11 changed files with 574 additions and 384 deletions

View File

@@ -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') {