Если вам нужно изменить значения определенных свойств в заказе, но при этом в этих значениях участвуют другие свойства, то сделать это можно таким образом.
Код |
---|
use Bitrix\Main;
Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderBeforeSaved',
'saleOrderBeforeSaved'
);
function saleOrderBeforeSaved(Main\Event $event)
{
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter("ENTITY");
/** @var \Bitrix\Sale\PropertyValueCollection $propertyCollection */
$propertyCollection = $order->getPropertyCollection();
$propsData = [];
/**
* Собираем все свойства и их значения в массив
* @var \Bitrix\Sale\PropertyValue $propertyItem
*/
foreach ($propertyCollection as $propertyItem) {
if (!empty($propertyItem->getField("CODE"))) {
$propsData[$propertyItem->getField("CODE")] = trim($propertyItem->getValue());
}
}
/**
* Перебираем свойства и изменяем нужные значения
* @var \Bitrix\Sale\PropertyValue $propertyItem
*/
foreach ($propertyCollection as $propertyItem) {
switch ($propertyItem->getField("CODE")) {
// Установка полного адреса в формате: Адрес, Город, Индекс
case 'F_PATH':
$val = trim($propsData['ADDRESS'] . ', ' . $propsData['CITY'] . ', ' . $propsData['ZIP']);
$propertyItem->setField("VALUE", $val);
break;
// Прописываем ФИО в одно поле
case 'F_FIO':
$val = $propsData['FNAME'] . ' ' . $propsData['LNAME'] . ' ' . $propsData['MNAME'];
$propertyItem->setField("VALUE", $val);
break;
}
}
} |