Добавление собственных полей для передачи в amoCRM

Обновлено 12.06.2024

Для добавления собственного поля необходимо создать класс, унаследованный от \Rover\AmoSale\Field\Bx\UserCustom. В классе должны быть реализованы методы getName и getValue и использован трейт Rover\AmoSale\Field\Traits\IsSourceTrait. После этого (чаще всего в файле init.php) необходимо создать обработчик события onGetUserCustomChildClasses, возвращающий ассоциативный массив, ключом которого является путь к файлу добавляемого класса от корня сайта, а значением — имя класса. Таким же образом можно добавить сразу несколько классов.

Пример

Создаём класс в файле /local/php_interface/discounttest.php

namespace Rover\Test;

use Rover\AmoSale\Directory\Entity\Event;
use Rover\AmoSale\Event\OrderBase;
use Rover\AmoSale\Field\Bx\UserCustom;
use Rover\AmoSale\Field\Traits\IsSourceTrait;

class DiscountTest extends UserCustom
{
    use IsSourceTrait;

    public static function getName(): string
    {
        return 'Примененные скидочные купоны';
    }

    public function getValue(Event $event): string
    {
        if (!$event instanceof OrderBase)
            throw new ArgumentOutOfRangeException('event');

        /** @var \Bitrix\Sale\Order $order */
        $order      = $event->getEntity();
        $couponList = $order->getDiscount()->getApplyResult()['COUPON_LIST'] ?? [];
        $result     = [];
        foreach ($couponList as $coupon)
            if ($coupon['APPLY'] == 'Y')
                $result[] = $coupon['COUPON'];

        return implode(', ', $result);
    }
}

Пишем обработчик события onGetUserCustomChildClasses

\Bitrix\Main\EventManager::getInstance()->addEventHandler('rover.amosale', 'onGetUserCustomChildClasses', function (Event $event)
{
    return new \Bitrix\Main\EventResult(\Bitrix\Main\ORM\EventResult::SUCCESS, [
        '/local/php_interface/discounttest.php' => '\Rover\Test\DiscountTest'
    ]);
});

Если всё сделано правильно, то у всех сущностей (сделок, контактов, компаний) в разделе "Пользовательские поля" появится поле с названием "Примененные скидочные купоны". Также это поле будет доступно в списке плейсхолдеров, а при добавлении в примечание, значение будет сформировано по шаблону #имя поля#: #значение поля#.