0) { header("Location: /IMPORTADORES/agencias/alta?error=email_exists"); exit; } // 4. Insertar usuario $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, ?)"; $params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']]; $stmtInsert = sqlsrv_query($conn, $sqlInsert, $params); if ($stmtInsert === false) { error_log("ERROR: Fallo al insertar usuario"); error_log(print_r(sqlsrv_errors(), true)); throw new Exception("Error al insertar usuario"); } $idUsuarioRow = sqlsrv_fetch_array($stmtInsert, SQLSRV_FETCH_ASSOC); $id_usuario = $idUsuarioRow['id_usuario'] ?? null; if (!$id_usuario) { error_log("ERROR: No se obtuvo id_usuario tras el insert"); throw new Exception("Error al obtener ID del nuevo usuario"); } // 6. Obtener la agencia del administrador actual $sqlAgencia = "SELECT id_agencia FROM agencias_aduanales WHERE id_administrador = ?"; $stmtAgencia = sqlsrv_query($conn, $sqlAgencia, [$_SESSION['usuario_id']]); $agenciaRow = sqlsrv_fetch_array($stmtAgencia, SQLSRV_FETCH_ASSOC); $id_agencia = $agenciaRow['id_agencia'] ?? null; if (!$id_agencia) { error_log("ERROR: No se encontró agencia para el admin_agencia con id_usuario=" . $_SESSION['usuario_id']); throw new Exception("No se encontró agencia asociada al administrador"); } // 7. Crear la relación agente-agencia $sqlRelacion = "INSERT INTO agente_agencia (id_agente, id_agencia, fecha_asignacion, activo, asignado_por) VALUES (?, ?, GETDATE(), 1, ?)"; $paramsRelacion = [$id_usuario, $id_agencia, $_SESSION['usuario_id']]; $stmtRelacion = sqlsrv_query($conn, $sqlRelacion, $paramsRelacion); if ($stmtRelacion === false) { error_log("ERROR: No se pudo insertar la relación agente-agencia"); error_log(print_r(sqlsrv_errors(), true)); throw new Exception("Error al guardar relación agente-agencia"); } // 8. 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"); } // 9. Enviar correo de bienvenida if (class_exists('PHPMailer\PHPMailer\PHPMailer')) { $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); // Email sin encriptar para el envío $mail->CharSet = 'UTF-8'; $mail->isHTML(true); $mail->Subject = 'Tu acceso a la plataforma SIIH ha sido creado'; // Determinar el tipo de usuario para el mensaje $tipoUsuarioTexto = match($tipo) { 'agente_aduanal' => 'agente aduanal', default => 'usuario' }; $mail->Body = "