@countZer0

Как записать значение в пользовательское поле при изменении статуса заказа?

Всем привет!

Нужно забрать сумму заказа и записать значение в пользовательское поле(объет 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
        );
      }
    }


Тип поля: строка. Само поле относится к пользователю. Помогите разобраться
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
@kudis
Bitrix developer
$order->setFields($arFieldsToChange);
Ответ написан
Комментировать
@countZer0 Автор вопроса
Может кому пригодится, решил так:

\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
    );
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы