diff --git a/app/controllers/administrador.php b/app/controllers/administrador.php index c3cc461..7f949aa 100644 --- a/app/controllers/administrador.php +++ b/app/controllers/administrador.php @@ -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() "; $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) { diff --git a/views/admin/agencias_activas.php b/views/admin/agencias_activas.php index 8bf2731..afc1f00 100644 --- a/views/admin/agencias_activas.php +++ b/views/admin/agencias_activas.php @@ -124,7 +124,7 @@ @@ -134,11 +134,11 @@ Swal.fire({ icon: 'error', title: 'No autorizado', text: 'No tienes permisos para realizar esta acción.', confirmButtonColor: '#dc3545' }); - Swal.fire({ icon: 'error', title: 'ID inválido', text: 'El identificador del usuario no es válido.', confirmButtonColor: '#dc3545' }); + Swal.fire({ icon: 'error', title: 'ID inválido', text: 'El identificador de la agencia no es válido.', confirmButtonColor: '#dc3545' }); - Swal.fire({ icon: 'error', title: 'Usuario no encontrado', text: 'No se encontró el usuario especificado.', confirmButtonColor: '#dc3545' }); + Swal.fire({ icon: 'error', title: 'Agencia no encontrada', text: 'No se encontró la agencia especificada.', confirmButtonColor: '#dc3545' }); - 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 de la agencia.', confirmButtonColor: '#dc3545' }); diff --git a/views/admin/alta_agencias.php b/views/admin/alta_agencias.php index 81d5c1d..39fb7b8 100644 --- a/views/admin/alta_agencias.php +++ b/views/admin/alta_agencias.php @@ -199,7 +199,7 @@ @@ -335,7 +321,7 @@ diff --git a/views/admin/aprobar_agencias.php b/views/admin/aprobar_agencias.php index 940da05..8865f66 100644 --- a/views/admin/aprobar_agencias.php +++ b/views/admin/aprobar_agencias.php @@ -8,6 +8,10 @@ + + + + @@ -35,8 +39,8 @@ .card-hover:hover { transform: translateY(-8px) scale(1.02); box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.15) !important; } .btn-pulse { animation: pulse 2s infinite; } @keyframes pulse { - 0% { transform: scale(1); } - 50% { transform: scale(1.05); } + 0% { transform: scale(1); } + 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .fade-in-up { animation: fadeInUp 0.8s ease-out; } @@ -106,16 +110,23 @@ - - - No hay agencias registradas aún. - + + \ No newline at end of file