- Создаём поле для хранения идентификатора покупателя SUBUSER_ID
- Добавляем обработчик OnBeforeSaleOrderFinalAction, что бы установить наше свойство.
<?php
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnBeforeSaleOrderFinalAction', 'OnBeforeSaleOrderFinalActionHandler');
function OnBeforeSaleOrderFinalActionHandler(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$userProfileId = getContragentID($order->getId());
$propertyCollection = $order->getpropertyCollection();
foreach ($propertyCollection as $property) {
if($property->getField('CODE') == 'SUBUSER_ID') {
$property->setValue($userProfileId);
}
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS, array(
"ENTITY" => $order,
)
);
}
?>
- Дальше находим ID профиля покупателя по ИНН у Юр.Лиц, и по ФИО(названию профиля) у Физ.Лиц.
<?php
function getContragentID($orderID) {
CModule::IncludeModule("sale");
if ($arOrder = CSaleOrder::GetByID($orderID)) {
$profiles = \Bitrix\Sale\Helpers\Admin\Blocks\OrderBuyer::getBuyerProfilesList($arOrder['USER_ID'],$arOrder['PERSON_TYPE_ID']);
unset($profiles[0]);
$profiles = array_flip($profiles);
$filterValue = array('PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], 'IS_PROFILE_NAME' => 'Y');
if ($arOrder['PERSON_TYPE_ID']==2) {
$filterValue = array('PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], 'CODE' => 'INN');
}
$rsOrderProps = CSaleOrderProps::GetList(array(), $filterValue);
if ($arOrderProp = $rsOrderProps->Fetch()) {
$rsProps = CSaleOrderPropsValue::GetList(array('SORT' => 'ASC'), array('ORDER_ID' => $orderID, 'ORDER_PROPS_ID' => $arOrderProp['ID']));
if ($arProp = $rsProps->Fetch()) {
$rsUP = CSaleOrderUserPropsValue::GetList(array(), array('ORDER_PROPS_ID' => $arOrderProp['ID'],
'VALUE' => $arProp['VALUE'],
'PROP_PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID']));
if ($arUP = $rsUP->Fetch()) {
if (array_key_exists($arProp['VALUE'], $profiles) && $arOrder['PERSON_TYPE_ID']==1) {
return $profiles[$arProp['VALUE']];
}
return $arUP['USER_PROPS_ID'];
} else {
$db_sales = CSaleOrderUserProps::GetList(array(),array("USER_ID" => $arOrder['USER_ID'],"PERSON_TYPE_ID"=>$arOrder['PERSON_TYPE_ID'],"=NAME"=>$arProp['VALUE']));
if ($ar_sales = $db_sales->Fetch()) {
return $ar_sales["ID"];
}
}
}
}
}
}
?>