Давольно часто приходится в момент оформления заказа формировать данные по своему. В данной ситуации делается некая проверка по имеющим профилям покупателей. Данный механизм проверяет, есть ли данный ИНН в других учетных записях пользователей. Если есть, то не даст возможность оформить заказа клиенту. Данный метод подходит для оптовых клиентов.
// События на сохранение заказа
$eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', 'OnSaleOrderBeforeSavedCustom');
function OnSaleOrderBeforeSavedCustom(\Bitrix\Main\Event $event)
{
$order = $event->getParameter("ENTITY");
//Собираем свойства заказа
$orderProps = [];
/** @var Bitrix\Crm\Order\PropertyValue $orderProp */
foreach ($order->getPropertyCollection() as $propId => $orderProp) {
if (!empty($orderProp->getField("CODE"))) {
$orderProps[$orderProp->getField('CODE')] = trim($orderProp->getValue());
}
}
//Метод возвращает результат выборки записей из профилей покупателя
//Далее по полученным полям находим информацию по ИНН
$arUserProps = CSaleOrderUserPropsValue::GetList(
array("ID" => "ASC"),
Array(
"CODE" => 'INN',
"VALUE" => $orderProps['INN']
)
)->Fetch();
//если значение у свойства профиля существует
//то информируем об этого пользователя
if ($arUserProps)
{
$event->addResult(new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
new \Bitrix\Sale\ResultError('Такой ИНН уже используется в другой учетной записи пользователя.
Если это ошибка, обратитесь за помощью к нам')
));
}
}