Массовое добавление средств на внутренний счет пользователей Битрикс

В рамках работы с внутренними счетами пользователей в Битриксе иногда возникает необходимость массового обновления средств на счетах. Это может быть полезно, например, для начисления бонусов, коррекции балансов или других операций, требующих массового изменения финансовых данных пользователей.

Создание административной страницы


Для удобства и безопасности массового обновления счетов пользователей мы можем создать административную страницу в Битриксе. Создайте файл mass_account_update.php в директории /bitrix/admin/. В этом файле определите следующий код:

<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");

global $APPLICATION;
$APPLICATION->SetTitle("Массовое обновление счетов пользователей");

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

// ...ваш код формы и обработчика будет здесь...

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>

Создание формы и обработчика

Добавим в административную страницу форму для выбора пользователей и ввода суммы для массового обновления их счетов.

<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
use Bitrix\Sale\Internals\AccountTable;
global $APPLICATION;
$APPLICATION->SetTitle("Массовое обновление счетов пользователей");

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["update_accounts"]) {
    $userIds = $_POST["user_ids"]; // Получаем массив ID пользователей из формы
    $amountToAdd = $_POST["amount_to_add"]; // Получаем сумму для добавления

    foreach ($userIds as $userId) {
        // Получение текущего баланса пользователя
        $userAccount = AccountTable::getList([
            'filter' => ['USER_ID' => $userId],
        ])->fetch();

        // Если счет пользователя найден, увеличиваем его баланс
        if ($userAccount) {
            $currentBalance = $userAccount['CURRENT_BUDGET'] + $amountToAdd;

            // Обновление счета пользователя с новым балансом
            AccountTable::update($userAccount['ID'], [
                'CURRENT_BUDGET' => $currentBalance,
            ]);
        } else {
            // Если счет не найден, можно создать новую запись с начальным балансом
            AccountTable::add([
                'USER_ID' => $userId,
                'CURRENCY' => 'RUB', // Валюта счета (может быть изменена)
                'CURRENT_BUDGET' => $amountToAdd, // Начальный баланс
            ]);
        }
    }

    // После обновления выведите сообщение об успешном завершении операции
    CAdminMessage::ShowMessage(["MESSAGE" => "Счета пользователей успешно обновлены", "TYPE" => "OK"]);
}

// Получение списка пользователей для выбора
$userList = [];
$rsUsers = CUser::GetList(($by="ID"), ($order="ASC"));
while ($user = $rsUsers->Fetch()) {
    $userList[$user['ID']] = $user['NAME'].' '.$user['LAST_NAME'].' ('.$user['ID'].')';
}
?>

<form method="POST" action="<?=$_SERVER["REQUEST_URI"]?>">
    <input type="hidden" name="update_accounts" value="Y">
    <label>Выберите пользователей для обновления счетов:</label>
    <select name="user_ids[]" multiple>
        <?php foreach ($userList as $userId => $userName): ?>
            <option value="<?=$userId?>"><?=$userName?></option>
        <?php endforeach; ?>
    </select>
    <label>Сумма для добавления к счету:</label>
    <input type="text" name="amount_to_add">
    <input type="submit" value="Обновить счета">
</form>

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>

Заключение


Массовое обновление счетов пользователей в Битриксе может быть удобным инструментом для администраторов сайтов при необходимости быстрой коррекции балансов пользователей. Однако, при использовании таких функций следует обеспечить безопасность и правильную обработку данных, а также проводить тщательное тестирование на тестовой среде перед применением на рабочем проекте.

Комментарии

Коментарии отсутствуют, будьте первым(ой) кто напишет под этим постом!

Написать коментарий