Как записать значение в пользовательское поле при изменении статуса заказа?
Всем привет!
Нужно забрать сумму заказа и записать значение в пользовательское поле(объет USER) при смене статуса заказа. Для этого в init.php добавляю такой код:
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleStatusOrderChange', ['Handler', 'OnSaleStatusOrderChange']);
class Handler {
function OnSaleStatusOrderChange($event)
{
$parameters = $event->getParameters();
if ($parameters['VALUE'] === 'P')
{
/** @var \Bitrix\Sale\Order $order */
$order = $parameters['ENTITY'];
/*
здесь как то нужно записать значение в поле
*/
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS
);
}
}
Тип поля: строка. Само поле относится к пользователю. Помогите разобраться
Ответы (2 шт):
Автор решения: Виктор Карев
→ Ссылка
$obUserTypeEntity = new CUserTypeEntity();
// получить список пользовательских полей
$rsList = $obUserTypeEntity->GetList($arSort, $arFilter);
// обновить метаданные пользовательского поля
$obUserTypeEntity->Update($ID, $arFields);
Для обновления значений необходимо использовать классы СUserTypeString, CUserTypeInt и подобные. С версии 20.0.700 рекомендуется использовать классы ядра D7 https://dev.1c-bitrix.ru/api_d7/bitrix/main/userfield/introduction.php
Автор решения: bogdan vorobey
→ Ссылка
Может кому пригодится, решил так:
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleStatusOrderChange', ['Handler', 'OnSaleStatusOrderChange']);
class Handler {
function OnSaleStatusOrderChange($event)
{
$parameters = $event->getParameters();
if ($parameters['VALUE'] === 'P')
{
/** @var \Bitrix\Sale\Order $order */
$order = $parameters['ENTITY'];
$userID = $order->getField("USER_ID"); // получаем ID пользователя
$orderPrice = $order->getField("PRICE"); // получаем сумму заказа
//получаем пользовательское поле для записи
global $USER;
$filter = Array("ID" => $userID, "ACTIVE"=> "Y");
$arParams["SELECT"] = array( "UF_BONUS_SUM");
$rsUsers = CUser::GetList(($by="personal_phone"), ($order="desc"), $filter, $arParams);
while ($arUser = $rsUsers->Fetch()) {
$oldSum = $arUser["UF_BONUS_SUM"];
}
$bonusSum = $oldSum + $orderPrice; // сумма заказа + сумма, которая уже записана в пользовательское поле
$user = new CUser;
$fields = Array(
"UF_BONUS_SUM" => $bonusSum,
);
$user->Update($userID, $fields); // обновляем поле
//Bitrix\Main\Diag\Debug::writeToFile(array($order ),"","/log_new.txt");
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS
);
}
}