Сергей Эсауленко

При оформление заказа проверять наличие профиля покупателя у других пользователей Битрикс

Давольно часто приходится в момент оформления заказа формировать данные по своему. В данной ситуации делается некая проверка по имеющим профилям покупателей. Данный механизм проверяет, есть ли данный ИНН в других учетных записях пользователей. Если есть, то не даст возможность оформить заказа клиенту. Данный метод подходит для оптовых клиентов.
// События на сохранение заказа
$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('Такой ИНН уже используется в другой учетной записи пользователя.<br> Если это ошибка, обратитесь за помощью к нам')
            ));
        }
}
25.11.2022
Разделяем ФИО на самостоятельные поля в компоненте sale.order.ajax