Обновлено 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'
]);
});
Если всё сделано правильно, то у всех сущностей (сделок, контактов, компаний) в разделе "Пользовательские поля" появится поле с названием "Примененные скидочные купоны". Также это поле будет доступно в списке плейсхолдеров, а при добавлении в примечание, значение будет сформировано по шаблону #имя поля#: #значение поля#
.