Correcciones
This commit is contained in:
@@ -54,127 +54,171 @@ function aprobar_usuario()
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtener la solicitud
|
// Verificar sesión del usuario administrador
|
||||||
$sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
|
if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id'])) {
|
||||||
$stmt = sqlsrv_query($conn, $sql, [$id]);
|
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=session_error");
|
||||||
$solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
|
||||||
|
|
||||||
if (!$solicitud) {
|
|
||||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=request_not_found");
|
|
||||||
exit;
|
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 {
|
try {
|
||||||
$mail->isSMTP();
|
// Iniciar transacción
|
||||||
$mail->Host = 'secure.emailsrvr.com';
|
sqlsrv_begin_transaction($conn);
|
||||||
$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');
|
// Obtener la solicitud
|
||||||
$mail->addAddress($email);
|
$sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
|
||||||
$mail->CharSet = 'UTF-8';
|
$stmt = sqlsrv_query($conn, $sql, [$id]);
|
||||||
$mail->isHTML(true);
|
|
||||||
$mail->Subject = 'Tu acceso a la plataforma SIIH ha sido autorizado';
|
|
||||||
|
|
||||||
$mail->Body = "
|
if (!$stmt) {
|
||||||
<div style='font-family: Segoe UI, sans-serif; background-color: #f4f6f9; padding: 40px;'>
|
throw new Exception("Error en consulta de solicitud: " . print_r(sqlsrv_errors(), true));
|
||||||
<div style='max-width: 600px; margin: auto; background: #fff; border: 1px solid #ddd; border-radius: 10px; overflow: hidden;'>
|
}
|
||||||
<div style='background: linear-gradient(to right, #003366, #0055A5); padding: 20px; text-align: center;'>
|
|
||||||
<h2 style='color: white;'>¡Bienvenido a SIIH!</h2>
|
$solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||||
</div>
|
|
||||||
<div style='padding: 30px; color: #333; font-size: 16px;'>
|
if (!$solicitud) {
|
||||||
<p>Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:</p>
|
throw new Exception("Solicitud no encontrada");
|
||||||
<p><strong>Correo:</strong> $email</p>
|
}
|
||||||
<p><strong>Contraseña:</strong> $password_plain</p>
|
|
||||||
<p>📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.</p>
|
// Validar que no haya sido aprobada ya
|
||||||
<p><a href='http://siih.aduanasoft.com/IMPORTADORES/login' class='btn btn-primary'>Ir al sistema</a></p>
|
if ($solicitud['request_status'] === 'approved') {
|
||||||
</div>
|
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=already_approved");
|
||||||
<div style='background: #e9ecef; text-align: center; padding: 15px; font-size: 13px; color: #666;'>
|
exit;
|
||||||
© " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
|
}
|
||||||
</div>
|
|
||||||
</div>
|
// Preparar datos con validación
|
||||||
</div>";
|
$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 = "
|
||||||
|
<div style='font-family: Segoe UI, sans-serif; background-color: #f4f6f9; padding: 40px;'>
|
||||||
|
<div style='max-width: 600px; margin: auto; background: #fff; border: 1px solid #ddd; border-radius: 10px; overflow: hidden;'>
|
||||||
|
<div style='background: linear-gradient(to right, #003366, #0055A5); padding: 20px; text-align: center;'>
|
||||||
|
<h2 style='color: white;'>¡Bienvenido a SIIH!</h2>
|
||||||
|
</div>
|
||||||
|
<div style='padding: 30px; color: #333; font-size: 16px;'>
|
||||||
|
<p>Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:</p>
|
||||||
|
<p><strong>Correo:</strong> $email</p>
|
||||||
|
<p><strong>Contraseña:</strong> $password_plain</p>
|
||||||
|
<p>📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.</p>
|
||||||
|
<p><a href='http://siih.aduanasoft.com/IMPORTADORES/login' class='btn btn-primary'>Ir al sistema</a></p>
|
||||||
|
</div>
|
||||||
|
<div style='background: #e9ecef; text-align: center; padding: 15px; font-size: 13px; color: #666;'>
|
||||||
|
© " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
$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) {
|
} 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;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,10 +252,10 @@ function guardar_usuario()
|
|||||||
$conn = getConnection();
|
$conn = getConnection();
|
||||||
|
|
||||||
// 1. Capturar y validar datos
|
// 1. Capturar y validar datos
|
||||||
$nombre = trim($_POST['nombre'] ?? '');
|
$nombre = trim($_POST['nombre'] ?? '');
|
||||||
$email = trim($_POST['email'] ?? '');
|
$email = trim($_POST['email'] ?? '');
|
||||||
$password = $_POST['password'] ?? '';
|
$password = $_POST['password'] ?? '';
|
||||||
$tipo = $_POST['tipo_usuario'] ?? '';
|
$tipo = $_POST['tipo_usuario'] ?? '';
|
||||||
|
|
||||||
if (empty($nombre) || empty($email) || empty($password) || empty($tipo)) {
|
if (empty($nombre) || empty($email) || empty($password) || empty($tipo)) {
|
||||||
header("Location: /IMPORTADORES/administrador/altaUsuarios?error=invalid_data");
|
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)
|
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||||
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
|
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
|
||||||
|
|
||||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
|
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
|
||||||
|
|
||||||
if ($stmtInsert === false) {
|
if ($stmtInsert === false) {
|
||||||
@@ -776,7 +819,6 @@ function agenciasActivas()
|
|||||||
include __DIR__ . '/../../views/admin/agencias_activas.php';
|
include __DIR__ . '/../../views/admin/agencias_activas.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function suspender()
|
function suspender()
|
||||||
{
|
{
|
||||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||||
@@ -993,45 +1035,6 @@ function suspenderAgencia()
|
|||||||
exit;
|
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()
|
function configuracion()
|
||||||
{
|
{
|
||||||
$conn = getConnection();
|
$conn = getConnection();
|
||||||
|
|||||||
@@ -6,23 +6,82 @@ require_once __DIR__ . '/../helpers/crypto.php';
|
|||||||
function index()
|
function index()
|
||||||
{
|
{
|
||||||
$conn = getConnection();
|
$conn = getConnection();
|
||||||
|
|
||||||
$id_usuario = $_SESSION['usuario_id'] ?? null;
|
$id_usuario = $_SESSION['usuario_id'] ?? null;
|
||||||
|
|
||||||
if (!$id_usuario) {
|
if (!$id_usuario) {
|
||||||
die("ID de usuario no disponible en la sesión.");
|
die("ID de usuario no disponible en la sesión.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT * FROM informacion_general WHERE id_usuario = ?";
|
// Primero obtenemos la información básica del usuario
|
||||||
$params = [$id_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_usuario === false) {
|
||||||
|
|
||||||
if ($stmt === false) {
|
|
||||||
die(print_r(sqlsrv_errors(), true));
|
die(print_r(sqlsrv_errors(), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
$datos = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
$usuario = sqlsrv_fetch_array($stmt_usuario, SQLSRV_FETCH_ASSOC);
|
||||||
|
|
||||||
|
if (!$usuario) {
|
||||||
|
die("Usuario no encontrado.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$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';
|
include __DIR__ . '/../../views/configuracion/dashboard_configuracion.php';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,108 @@ function lista()
|
|||||||
include __DIR__ . '/../../views/locaciones/lista.php';
|
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()
|
function desvincularUsuario()
|
||||||
{
|
{
|
||||||
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
|
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
|
||||||
|
|||||||
@@ -158,82 +158,6 @@ function vinculacionesAgencia()
|
|||||||
include __DIR__ . '/../../views/vinculaciones/usuarios_vinculados.php';
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function desvincularAgencia()
|
function desvincularAgencia()
|
||||||
{
|
{
|
||||||
// ✅ CORREGIR: Debe ser admin_agencia, no importador
|
// ✅ CORREGIR: Debe ser admin_agencia, no importador
|
||||||
@@ -247,13 +171,13 @@ function desvincularAgencia()
|
|||||||
$tipo = $_GET['tipo'] ?? null;
|
$tipo = $_GET['tipo'] ?? null;
|
||||||
|
|
||||||
if (!$id_relacion || !is_numeric($id_relacion)) {
|
if (!$id_relacion || !is_numeric($id_relacion)) {
|
||||||
header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?error=invalid_id');
|
header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?error=invalid_id');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validar que el tipo sea válido
|
// Validar que el tipo sea válido
|
||||||
if (!in_array($tipo, ['importador', 'agente'])) {
|
if (!in_array($tipo, ['importador', 'agente'])) {
|
||||||
header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?error=invalid_type');
|
header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?error=invalid_type');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +202,7 @@ function desvincularAgencia()
|
|||||||
WHERE ia.id_relacion = ? AND aa.id_administrador = ? AND u.tipo_usuario = 'importador'
|
WHERE ia.id_relacion = ? AND aa.id_administrador = ? AND u.tipo_usuario = 'importador'
|
||||||
";
|
";
|
||||||
$stmtVerificar = sqlsrv_query($conn, $sqlVerificar, [$id_relacion, $_SESSION['usuario_id']]);
|
$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) {
|
if (!$relacion) {
|
||||||
throw new Exception('Relación de importador no encontrada o no tienes permisos para desvincularla');
|
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'
|
WHERE aa.id_relacion = ? AND ag.id_administrador = ? AND u.tipo_usuario = 'agente_aduanal'
|
||||||
";
|
";
|
||||||
$stmtVerificar = sqlsrv_query($conn, $sqlVerificar, [$id_relacion, $_SESSION['usuario_id']]);
|
$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) {
|
if (!$relacion) {
|
||||||
throw new Exception('Relación de agente no encontrada o no tienes permisos para desvincularla');
|
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
|
// Desactivar la relación de agente
|
||||||
$sqlDesactivar = "
|
$sqlDesactivar = "
|
||||||
UPDATE agente_agencia
|
UPDATE agente_agencia
|
||||||
SET activo = 0,
|
SET activo = 0
|
||||||
fecha_desvinculacion = GETDATE()
|
|
||||||
WHERE id_relacion = ?
|
WHERE id_relacion = ?
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
@@ -339,38 +262,13 @@ function desvincularAgencia()
|
|||||||
// Confirmar transacción
|
// Confirmar transacción
|
||||||
sqlsrv_commit($conn);
|
sqlsrv_commit($conn);
|
||||||
|
|
||||||
header('Location: /IMPORTADORES/vinculaciones/usuariosVinculados?success=unlinked&tipo=' . $tipo);
|
header('Location: /IMPORTADORES/vinculaciones/vinculacionesAgencia?success=unlinked&tipo=' . $tipo);
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// Revertir transacción en caso de error
|
// Revertir transacción en caso de error
|
||||||
sqlsrv_rollback($conn);
|
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;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,7 +118,15 @@
|
|||||||
<?php elseif ($_GET['error'] === 'update_failed'): ?>
|
<?php elseif ($_GET['error'] === 'update_failed'): ?>
|
||||||
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 al actualizar', text: 'No se pudo actualizar el estado del usuario.', confirmButtonColor: '#dc3545' });
|
||||||
<?php elseif ($_GET['error'] === 'failed'): ?>
|
<?php elseif ($_GET['error'] === 'failed'): ?>
|
||||||
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' });
|
||||||
|
<?php elseif ($_GET['error'] === 'session_error'): ?>
|
||||||
|
Swal.fire({ icon: 'error', title: 'Error de sesión', text: 'Tu sesión ha expirado. Por favor, inicia sesión nuevamente.', confirmButtonColor: '#dc3545' });
|
||||||
|
<?php elseif ($_GET['error'] === 'info_general_failed'): ?>
|
||||||
|
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' });
|
||||||
|
<?php elseif ($_GET['error'] === 'user_id_failed'): ?>
|
||||||
|
Swal.fire({ icon: 'error', title: 'Error interno', text: 'No se pudo obtener el ID del usuario creado. Contacta al soporte técnico.', confirmButtonColor: '#dc3545' });
|
||||||
|
<?php elseif ($_GET['error'] === 'process_failed'): ?>
|
||||||
|
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' });
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
Swal.fire({ icon: 'error', title: 'Error', text: 'Ha ocurrido un error inesperado. Por favor, inténtalo nuevamente.', confirmButtonColor: '#dc3545' });
|
Swal.fire({ icon: 'error', title: 'Error', text: 'Ha ocurrido un error inesperado. Por favor, inténtalo nuevamente.', confirmButtonColor: '#dc3545' });
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|||||||
@@ -42,8 +42,8 @@
|
|||||||
<div class="card shadow-sm p-3">
|
<div class="card shadow-sm p-3">
|
||||||
<h5 class="text-primary">Solicitudes de vinculación</h5>
|
<h5 class="text-primary">Solicitudes de vinculación</h5>
|
||||||
<p>Aprueba las solicitudes de vinculación de los importadores.</p>
|
<p>Aprueba las solicitudes de vinculación de los importadores.</p>
|
||||||
<a href="/IMPORTADORES/agencias/solicitudesVinculacion"
|
<a href="/IMPORTADORES/vinculaciones/solicitudesVinculacion"
|
||||||
class="btn btn-primary btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agencias/solicitudesVinculacion' ? 'active' : '' ?>">
|
class="btn btn-primary btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/vinculaciones/solicitudesVinculacion' ? 'active' : '' ?>">
|
||||||
Ver solicitudes
|
Ver solicitudes
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -53,8 +53,8 @@
|
|||||||
<div class="card shadow-sm p-3">
|
<div class="card shadow-sm p-3">
|
||||||
<h5 class="text-success">Usuarios vinculados</h5>
|
<h5 class="text-success">Usuarios vinculados</h5>
|
||||||
<p>Consulta los que ya fueron autorizados.</p>
|
<p>Consulta los que ya fueron autorizados.</p>
|
||||||
<a href="/IMPORTADORES/agencias/activos"
|
<a href="/IMPORTADORES/vinculaciones/vinculacionesAgencia"
|
||||||
class="btn btn-success btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/agencias/activos' ? 'active' : '' ?>">
|
class="btn btn-success btn-sm mt-2 <?= $_SERVER['REQUEST_URI'] === '/IMPORTADORES/vinculaciones/vinculacionesAgencia' ? 'active' : '' ?>">
|
||||||
Ver usuarios
|
Ver usuarios
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,136 +27,258 @@
|
|||||||
}
|
}
|
||||||
.card { border-radius: 12px; }
|
.card { border-radius: 12px; }
|
||||||
label {font-weight: bold;}
|
label {font-weight: bold;}
|
||||||
|
.section-header { background-color: #e9ecef; padding: 10px 15px; margin: 0 0 20px 0; border-radius: 8px 8px 0 0; font-weight: bold; color: #495057; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h4 class="mb-4">ℹ️ Información General</h4>
|
<h4 class="mb-4">ℹ️ Información General</h4>
|
||||||
<div class="card shadow-sm p-4 mb-4 bg-white">
|
|
||||||
<form>
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">Clave:</label>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['clave'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-3"></div>
|
|
||||||
<label class="col-md-2 col-form-label">Tipo de identificador:</label>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<select name="tipo_identificador" class="form-control" disabled>
|
|
||||||
<option value="">-- Selecciona una opción --</option>
|
|
||||||
<option value="1" <?= ($datos['tipo_identificador'] ?? '') == '1' ? 'selected' : '' ?>>1 - RFC</option>
|
|
||||||
<option value="2" <?= ($datos['tipo_identificador'] ?? '') == '2' ? 'selected' : '' ?>>2 - CURP</option>
|
|
||||||
<option value="3" <?= ($datos['tipo_identificador'] ?? '') == '3' ? 'selected' : '' ?>>3 - SIN TAX ID</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<?php if (isset($datos['tipo_usuario']) && $datos['tipo_usuario'] === 'importador'): ?>
|
||||||
|
<div class="card shadow-sm p-4 mb-4 bg-white">
|
||||||
|
<div class="section-header">👤 Información Personal</div>
|
||||||
|
<form>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-md-2 col-form-label">Nombre:</label>
|
<label class="col-md-2 col-form-label">Clave:</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-3">
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['nombre'] ?? '') ?>" disabled>
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['clave'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3"></div>
|
||||||
|
<label class="col-md-2 col-form-label">Tipo de identificador:</label>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<select name="tipo_identificador" class="form-control" disabled>
|
||||||
|
<option value="">-- Selecciona una opción --</option>
|
||||||
|
<option value="1" <?= ($datos['tipo_identificador'] ?? '') == '1' ? 'selected' : '' ?>>1 - RFC</option>
|
||||||
|
<option value="2" <?= ($datos['tipo_identificador'] ?? '') == '2' ? 'selected' : '' ?>>2 - CURP</option>
|
||||||
|
<option value="3" <?= ($datos['tipo_identificador'] ?? '') == '3' ? 'selected' : '' ?>>3 - SIN TAX ID</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Nombre:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['nombre'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">RFC:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['rfc'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1"></div>
|
||||||
|
<label class="col-md-1 col-form-label">CURP:</label>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['curp'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Calle:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['calle'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Núm. Exterior:</label>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_exterior'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4"></div>
|
||||||
|
<label class="col-md-2 col-form-label">Núm. Interior:</label>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_interior'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Ciudad / Localidad:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['ciudad'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1"></div>
|
||||||
|
<label class="col-md-1 col-form-label">Colonia:</label>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['colonia'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">País:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['pais'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3"></div>
|
||||||
|
<label class="col-md-2 col-form-label">Código Postal:</label>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['codigo_postal'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Municipio:</label>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['municipio'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1"></div>
|
||||||
|
<label class="col-md-1 col-form-label">Estado:</label>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['estado'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Teléfono:</label>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['telefono'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1"></div>
|
||||||
|
<label class="col-md-1 col-form-label">Fax:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['fax'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Correo:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<input type="email" class="form-control" value="<?= htmlspecialchars($datos['correo'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Observaciones:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<textarea class="form-control" rows="3" disabled><?= htmlspecialchars($datos['observaciones'] ?? '') ?></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; justify-content: right;">
|
||||||
|
<a href="/IMPORTADORES/configuracion/editar" class="btn btn-success mb-3">✏️ Editar Información</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<?php elseif (isset($datos['tipo_usuario']) && in_array($datos['tipo_usuario'], ['admin_agencia', 'agente_aduanal'])): ?>
|
||||||
|
<div class="card shadow-sm p-4 mb-4 bg-white">
|
||||||
|
<div class="section-header">🏢 Información de Agencia Aduanal</div>
|
||||||
|
<form>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Nombre Agencia:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars(decrypt($datos['nombre_agencia'] ?? '')) ?>" disabled>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-md-2 col-form-label">RFC:</label>
|
<label class="col-md-2 col-form-label">RFC:</label>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['rfc'] ?? '') ?>" disabled>
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['rfc_agencia'] ?? '') ?>" disabled>
|
||||||
</div>
|
|
||||||
<div class="col-md-1"></div>
|
|
||||||
<label class="col-md-1 col-form-label">CURP:</label>
|
|
||||||
<div class="col-md-5">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['curp'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">Calle:</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['calle'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">Núm. Exterior:</label>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_exterior'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4"></div>
|
|
||||||
<label class="col-md-2 col-form-label">Núm. Interior:</label>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['num_interior'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">Ciudad / Localidad:</label>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['ciudad'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-1"></div>
|
|
||||||
<label class="col-md-1 col-form-label">Colonia:</label>
|
|
||||||
<div class="col-md-5">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['colonia'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">País:</label>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['pais'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3"></div>
|
|
||||||
<label class="col-md-2 col-form-label">Código Postal:</label>
|
|
||||||
<div class="col-md-2">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['codigo_postal'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<label class="col-md-2 col-form-label">Municipio:</label>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['municipio'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-1"></div>
|
|
||||||
<label class="col-md-1 col-form-label">Estado:</label>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['estado'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-md-2 col-form-label">Teléfono:</label>
|
<label class="col-md-2 col-form-label">Teléfono:</label>
|
||||||
<div class="col-md-5">
|
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['telefono'] ?? '') ?>" disabled>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-1"></div>
|
|
||||||
<label class="col-md-1 col-form-label">Fax:</label>
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['fax'] ?? '') ?>" disabled>
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['telefono_agencia'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3"></div>
|
||||||
|
<label class="col-md-1 col-form-label">Email:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type="email" class="form-control" value="<?= htmlspecialchars(decrypt($datos['email_agencia'] ?? '')) ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Dirección:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['direccion_agencia'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div><hr>
|
||||||
|
|
||||||
|
<!-- Información personal del usuario (para referencia) -->
|
||||||
|
<div class="section-header mt-4">👤 Mi Información Personal</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Nombre:</label>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars(decrypt($datos['nombre'] ?? '')) ?>" disabled>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-md-2 col-form-label">Correo:</label>
|
<label class="col-md-2 col-form-label">Correo:</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<input type="email" class="form-control" value="<?= htmlspecialchars($datos['correo'] ?? '') ?>" disabled>
|
<input type="email" class="form-control" value="<?= htmlspecialchars(decrypt($datos['correo'] ?? '')) ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if (isset($datos['fecha_asignacion']) && $datos['fecha_asignacion']): ?>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Fecha de Asignación:</label>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<?php
|
||||||
|
// Handle both DateTime objects and string dates
|
||||||
|
if ($datos['fecha_asignacion'] instanceof DateTime) {
|
||||||
|
$fecha_formateada = $datos['fecha_asignacion']->setTimezone(new DateTimeZone('America/Mexico_City'))->format('d/m/Y H:i');
|
||||||
|
} else {
|
||||||
|
$fecha_formateada = date('d/m/Y H:i', strtotime($datos['fecha_asignacion']));
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($fecha_formateada) ?>" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<?php elseif (isset($datos['tipo_usuario']) && $datos['tipo_usuario'] === 'super_admin'): ?>
|
||||||
|
<div class="card shadow-sm p-4 mb-4 bg-white">
|
||||||
|
<div class="section-header">🔧 Información de Super Administrador</div>
|
||||||
|
<form>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-1 col-form-label">Nombre:</label>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<!-- Para super_admin, NO desencriptar - usar directamente -->
|
||||||
|
<input type="text" class="form-control" value="<?= htmlspecialchars($datos['nombre'] ?? '') ?>" disabled>
|
||||||
|
</div>
|
||||||
|
<label class="col-md-2 col-form-label">Tipo de Usuario:</label>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<input type="text" class="form-control" value="Super Administrador" disabled>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-md-2 col-form-label">Observaciones:</label>
|
<label class="col-md-2 col-form-label">Correo:</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<textarea class="form-control" rows="3" disabled><?= htmlspecialchars($datos['observaciones'] ?? '') ?></textarea>
|
<!-- Para super_admin, NO desencriptar - usar directamente -->
|
||||||
|
<input type="email" class="form-control" value="<?= htmlspecialchars($datos['correo'] ?? '') ?>" disabled>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex; justify-content: right;">
|
|
||||||
<a href="/IMPORTADORES/configuracion/editar" class="btn btn-success mb-3">✏️ Editar Información</a>
|
<!-- Información adicional específica de super_admin -->
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-md-2 col-form-label">Privilegios:</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<textarea class="form-control" rows="2" disabled>Acceso completo al sistema - Gestión de usuarios, agencias, importadores y configuración general</textarea>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</div>
|
<?php else: ?>
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<h5>⚠️ Información no disponible</h5>
|
||||||
|
<p>No se pudo cargar la información para el tipo de usuario:
|
||||||
|
<strong><?= htmlspecialchars($datos['tipo_usuario'] ?? 'Desconocido') ?></strong>
|
||||||
|
</p>
|
||||||
|
<p class="mb-0">
|
||||||
|
<small class="text-muted">Tipos de usuario válidos: admin_agencia, agente_aduanal, super_admin, importador</small><br>
|
||||||
|
<small class="text-muted">
|
||||||
|
Datos disponibles:
|
||||||
|
<?= is_array($datos) ? implode(', ', array_keys($datos)) : 'Sin datos' ?>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
<div class="card shadow-sm p-3">
|
<div class="card shadow-sm p-3">
|
||||||
<h5 class="text-teal">Vinculaciones</h5>
|
<h5 class="text-teal">Vinculaciones</h5>
|
||||||
<p>Visualiza o establece nuevas vinculaciones con agencias aduanales.</p>
|
<p>Visualiza o establece nuevas vinculaciones con agencias aduanales.</p>
|
||||||
<a href="/IMPORTADORES/importadores/vinculaciones"
|
<a href="/IMPORTADORES/vinculaciones/vinculacionesUsuario"
|
||||||
class="btn btn-teal btn-sm mt-2 <?= str_contains($_SERVER['REQUEST_URI'], '/importadores/vinculaciones') ? 'active' : '' ?>">
|
class="btn btn-teal btn-sm mt-2 <?= str_contains($_SERVER['REQUEST_URI'], '/importadores/vinculaciones') ? 'active' : '' ?>">
|
||||||
Ver vinculaciones
|
Ver vinculaciones
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
class="nav-link px-3 py-2 <?= str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/vinculaciones/vinculacionesUsuario') ? 'active' : '' ?>">
|
class="nav-link px-3 py-2 <?= str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/vinculaciones/vinculacionesUsuario') ? 'active' : '' ?>">
|
||||||
• Mis vinculaciones
|
• Mis vinculaciones
|
||||||
</a>
|
</a>
|
||||||
<a href="/IMPORTADORES/vinculaciones/nuevaVinculacion"
|
<a href="/IMPORTADORES/importadores/nuevaVinculacion"
|
||||||
class="nav-link px-3 py-2 <?= str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/vinculaciones/nuevaVinculacion') ? 'active' : '' ?>">
|
class="nav-link px-3 py-2 <?= str_contains($_SERVER['REQUEST_URI'], '/IMPORTADORES/vinculaciones/nuevaVinculacion') ? 'active' : '' ?>">
|
||||||
• Nueva vinculación
|
• Nueva vinculación
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -68,9 +68,9 @@
|
|||||||
<td><?= $ag['creado_en'] ? $ag['creado_en']->format('Y-m-d H:i') : '' ?></td>
|
<td><?= $ag['creado_en'] ? $ag['creado_en']->format('Y-m-d H:i') : '' ?></td>
|
||||||
<td>
|
<td>
|
||||||
<?php if (!empty($ag['estado_solicitud']) && $ag['estado_solicitud'] === 'PENDIENTE'): ?>
|
<?php if (!empty($ag['estado_solicitud']) && $ag['estado_solicitud'] === 'PENDIENTE'): ?>
|
||||||
<a href="/IMPORTADORES/vinculaciones/cancelar?id=<?= $ag['id_agencia'] ?>" class="btn btn-sm btn-danger">Cancelar solicitud</a>
|
<a href="/IMPORTADORES/importadores/cancelarVinculacion?id=<?= $ag['id_agencia'] ?>" class="btn btn-sm btn-danger">Cancelar solicitud</a>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<a href="/IMPORTADORES/vinculaciones/vincular?id=<?= $ag['id_agencia'] ?>" class="btn btn-sm btn-success">Vincular</a>
|
<a href="/IMPORTADORES/importadores/vincular?id=<?= $ag['id_agencia'] ?>" class="btn btn-sm btn-success">Vincular</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -65,9 +65,7 @@
|
|||||||
<td><?= !empty($v['fecha_vinculacion']) ? $v['fecha_vinculacion']->format('Y-m-d H:i') : '' ?></td>
|
<td><?= !empty($v['fecha_vinculacion']) ? $v['fecha_vinculacion']->format('Y-m-d H:i') : '' ?></td>
|
||||||
<td>
|
<td>
|
||||||
<?php if (in_array($v['tipo_usuario_sistema'], ['importador', 'agente_aduanal'])): ?>
|
<?php if (in_array($v['tipo_usuario_sistema'], ['importador', 'agente_aduanal'])): ?>
|
||||||
<a href="/IMPORTADORES/vinculaciones/desvincularAgencia?id=<?= $v['id_relacion'] ?>&tipo=<?= $v['tipo_vinculacion'] ?>"
|
<a href="/IMPORTADORES/vinculaciones/desvincularAgencia?id=<?= $v['id_relacion'] ?>&tipo=<?= $v['tipo_vinculacion'] ?>" class="btn btn-sm btn-danger">
|
||||||
class="btn btn-sm btn-danger"
|
|
||||||
onclick="return confirm('¿Está seguro de que desea desvincular este usuario?')">
|
|
||||||
Desvincular
|
Desvincular
|
||||||
</a>
|
</a>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
|
|||||||
Reference in New Issue
Block a user