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

    @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
        );
      }
    }
    Ответ написан
    Комментировать
  • Как отредактировать свойство при создании заказа?

    @countZer0 Автор вопроса
    Разобрался, может кому пригодится. В настройках модуля интернет-магазина нужно было включить обработку устаревших событий. После этого все заработало.
    Ответ написан
    Комментировать