CORRECCIONES - ALTA DE AGENCIAS - ADMINISTRADOR

This commit is contained in:
2025-07-10 08:09:49 -06:00
parent 287ad27274
commit e820f81d31
4 changed files with 81 additions and 44 deletions

View File

@@ -535,7 +535,7 @@ function aprobar_agencia()
$sqlInsert2 = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)
";
$stmtInsert2 = sqlsrv_query($conn, $sqlInsert, [$admin_name_encrypt, $admin_email_encrypt, $password_hash, $tipo, $usuario_id]);
$stmtInsert2 = sqlsrv_query($conn, $sqlInsert2, [$admin_name_encrypt, $admin_email_encrypt, $password_hash, $tipo, $usuario_id]);
if (!$stmtInsert2) {
die("❌ Error al crear usuario administrador: " . print_r(sqlsrv_errors(), true));
@@ -561,9 +561,7 @@ function aprobar_agencia()
// Insertar en informacion_general
$sqlInfo = "INSERT INTO informacion_general (id_usuario, nombre, correo) VALUES (?, ?, ?)";
$stmtInfo = sqlsrv_query($conn, $sqlInfo, [
$id_usuario, $admin_name, $admin_email
]);
$stmtInfo = sqlsrv_query($conn, $sqlInfo, [$id_usuario, $admin_name, $admin_email]);
if (!$stmtInfo) {
die("❌ Error al insertar información general: " . print_r(sqlsrv_errors(), true));
@@ -657,13 +655,22 @@ function guardar_agencia()
exit;
}
error_log("Usuario ID: " . $_SESSION['usuario_id']);
error_log("Tipo usuario: " . $_SESSION['tipo_usuario']);
$conn = getConnection();
if (!$conn) {
throw new Exception("Error de conexión a la base de datos");
}
try {
if (!sqlsrv_begin_transaction($conn)) {
error_log("ERROR: No se pudo iniciar la transacción");
throw new Exception("Error al iniciar transacción");
}
error_log("Transacción iniciada correctamente");
// 1⃣ Captura y validación de datos
$nombre_agencia = trim($_POST['nombre_agencia'] ?? '');
$rfc_agencia = trim($_POST['rfc_agencia'] ?? '');
@@ -672,14 +679,22 @@ function guardar_agencia()
$direccion = trim($_POST['direccion'] ?? '');
$nombre_admin = trim($_POST['nombre_admin'] ?? '');
$correo_admin = trim($_POST['correo_admin'] ?? '');
error_log("Datos recibidos:");
error_log("- Nombre agencia: " . $nombre_agencia);
error_log("- RFC: " . $rfc_agencia);
error_log("- Correo agencia: " . $correo_agencia);
if (empty($nombre_agencia) || empty($rfc_agencia) || empty($correo_agencia) ||
empty($telefono) || empty($direccion) || empty($nombre_admin) || empty($correo_admin)) {
error_log("ERROR: Datos incompletos");
throw new Exception("Datos incompletos");
}
// 2⃣ Verificar función de encriptación
if (!function_exists('encrypt')) {
error_log("ERROR: Función encrypt no existe");
throw new Exception("Función de encriptación no disponible");
}
@@ -688,10 +703,14 @@ function guardar_agencia()
$correo_agencia_enc = encrypt($correo_agencia);
$nombre_admin_enc = encrypt($nombre_admin);
$correo_admin_enc = encrypt($correo_admin);
error_log("Datos encriptados correctamente");
// 3⃣ CREAR USUARIO ADMINISTRADOR Y OBTENER SU ID EN UNA SOLA CONSULTA
$password_plain = bin2hex(random_bytes(5));
$password_hash = password_hash($password_plain, PASSWORD_DEFAULT);
error_log("Password generado: " . $password_plain);
// ✅ SOLUCIÓN: INSERT con OUTPUT para obtener el ID inmediatamente
$sqlInsertAdmin = "INSERT INTO usuarios_sistema
@@ -704,6 +723,7 @@ function guardar_agencia()
if (!$stmtAdmin) {
$errors = sqlsrv_errors();
error_log("ERROR SQL Admin: " . print_r($errors, true));
throw new Exception("Error al crear administrador: " . print_r($errors, true));
}
@@ -712,8 +732,11 @@ function guardar_agencia()
$id_admin = $rowAdmin['id_usuario'] ?? null;
if (!$id_admin) {
error_log("ERROR: ID de administrador es null");
throw new Exception("No se pudo obtener ID de administrador");
}
error_log("Usuario administrador creado exitosamente con ID: " . $id_admin);
// 4⃣ CREAR AGENCIA Y OBTENER SU ID
$sqlInsertAgencia = "INSERT INTO agencias_aduanales
@@ -722,10 +745,13 @@ function guardar_agencia()
VALUES (?, ?, ?, ?, ?, ?, 1, GETDATE(), ?)
";
$paramsAgencia = [$nombre_agencia_enc, $rfc_agencia, $direccion, $telefono, $correo_agencia_enc, $id_admin, $_SESSION['usuario_id']];
error_log("Ejecutando SQL Agencia con ID admin: " . $id_admin);
$stmtAgencia = sqlsrv_query($conn, $sqlInsertAgencia, $paramsAgencia);
if (!$stmtAgencia) {
$errors = sqlsrv_errors();
error_log("ERROR SQL Agencia: " . print_r($errors, true));
throw new Exception("Error al crear agencia: " . print_r($errors, true));
}
@@ -734,8 +760,11 @@ function guardar_agencia()
$id_agencia = $rowAgencia['id_agencia'] ?? null;
if (!$id_agencia) {
error_log("ERROR: ID de agencia es null");
throw new Exception("No se pudo obtener ID de agencia");
}
error_log("Agencia creada exitosamente con ID: " . $id_agencia);
// 5⃣ CREAR RELACIÓN AGENTE-AGENCIA
$sqlInsertRelacion = "INSERT INTO agente_agencia
@@ -743,17 +772,24 @@ function guardar_agencia()
VALUES (?, ?, GETDATE(), 1, ?)
";
$paramsRelacion = [$id_admin, $id_agencia, $_SESSION['usuario_id']];
error_log("Creando relación agente-agencia");
$stmtRelacion = sqlsrv_query($conn, $sqlInsertRelacion, $paramsRelacion);
if (!$stmtRelacion) {
$errors = sqlsrv_errors();
error_log("ERROR SQL Relación: " . print_r($errors, true));
throw new Exception("Error al crear relación agente-agencia: " . print_r($errors, true));
}
error_log("Relación agente-agencia creada exitosamente");
// 6⃣ CONFIRMAR TRANSACCIÓN ✅
if (!sqlsrv_commit($conn)) {
error_log("ERROR: No se pudo confirmar la transacción");
throw new Exception("Error al confirmar transacción");
}
error_log("Transacción confirmada exitosamente");
// Registrar en bitácora
registrar_bitacora_agencia($id_agencia, $nombre_agencia, 'CREACION', $_SESSION['usuario_id']);
@@ -796,6 +832,7 @@ function guardar_agencia()
</div>";
$mail->send();
error_log("Correo enviado exitosamente a: " . $correo_admin);
} catch (Exception $e) {
error_log("Error al enviar correo: " . $e->getMessage());
@@ -804,22 +841,24 @@ function guardar_agencia()
}
// 8⃣ Redirigir con éxito
error_log("=== FIN EXITOSO guardar_agencia ===");
header("Location: /IMPORTADORES/administrador/altaAgencias?success=created");
exit;
} catch (Exception $e) {
error_log("ERROR CAPTURADO: " . $e->getMessage());
if (!sqlsrv_rollback($conn)) {
error_log("ERROR: No se pudo revertir la transacción");
} else {
error_log("Transacción revertida exitosamente");
}
error_log("=== FIN CON ERROR guardar_agencia ===");
header("Location: /IMPORTADORES/administrador/altaAgencias?error=save_failed");
exit;
} finally {
if ($conn) {
sqlsrv_close($conn);
error_log("Conexión cerrada");
}
}
}
@@ -837,6 +876,7 @@ function agenciasActivas()
FROM agencias_aduanales aa
INNER JOIN usuarios_sistema u
ON aa.id_administrador = u.id_usuario
WHERE aa.activo = 1
ORDER BY creado_en DESC
";
$stmt = sqlsrv_query($conn, $sql);
@@ -1032,7 +1072,7 @@ function suspenderAgencia()
$conn = getConnection();
$id = $_GET['id'] ?? null;
$id = $_GET['id'] ?? null;
if (!$id || !is_numeric($id)) {
header("Location: /IMPORTADORES/administrador/agenciasActivas?error=invalid_id");
@@ -1040,7 +1080,7 @@ function suspenderAgencia()
}
// Obtener el estado actual
$sqlEstado = "SELECT activo FROM agencias_aduanles WHERE id_usuario = ?";
$sqlEstado = "SELECT activo FROM agencias_aduanales WHERE id_agencia = ?";
$stmtEstado = sqlsrv_query($conn, $sqlEstado, [$id]);
if (!$stmtEstado || !($row = sqlsrv_fetch_array($stmtEstado, SQLSRV_FETCH_ASSOC))) {
@@ -1051,7 +1091,7 @@ function suspenderAgencia()
$nuevoEstado = $row['activo'] ? 0 : 1;
// Actualizar estado
$sqlUpdate = "UPDATE agencias_aduanles SET activo = ? WHERE id_usuario = ?";
$sqlUpdate = "UPDATE agencias_aduanales SET activo = ? WHERE id_agencia = ?";
$stmtUpdate = sqlsrv_query($conn, $sqlUpdate, [$nuevoEstado, $id]);
if (!$stmtUpdate) {