Обновлено 28.02.2025
Для добавления собственного поля необходимо создать класс, унаследованный от \Rover\AmoSale\Field\Bx\UserCustom
. В классе должны быть реализованы методы getName
и getValue
и использован трейт Rover\AmoSale\Field\Traits\IsSourceTrait
. После этого (чаще всего в файле init.php
) необходимо создать обработчик события onGetUserCustomChildClasses
, возвращающий ассоциативный массив, ключом которого является путь к файлу добавляемого класса от корня сайта, а значением — имя класса. Таким же образом можно добавить сразу несколько классов.
Создаём класс в файле /local/php_interface/discounttest.php
namespace Rover\Test;
use Bitrix\Main\ArgumentNullException;
use Bitrix\Main\ArgumentOutOfRangeException;
use Rover\AmoSale\Field\Bx\UserCustom;
use Rover\AmoSale\Field\Traits\IsSourceTrait;
use Rover\AmoSale\Task;
use Rover\AmoSale\Task\Order\OrderBase;
/**
* Class DeliveryPriceRaw
*
* @package Rover\AmoSale\Field\Bx\OrderCustom
* @author Pavel Shulaev (https://rover-it.me)
*/
class DiscountTest extends UserCustom
{
use IsSourceTrait;
/**
* @return string
* @author Pavel Shulaev (https://rover-it.me)
*/
public static function getName(): string
{
return 'Примененные скидочные купоны';
}
/**
* @param Task $task
* @return string
* @throws ArgumentNullException
* @throws ArgumentOutOfRangeException
* @author Pavel Shulaev (https://rover-it.me)
*/
public function getValue(Task $task): string
{
if (!$task instanceof OrderBase) {
throw new ArgumentOutOfRangeException('task');
}
$couponList = $task->getOrder()
->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'
]);
});
Если всё сделано правильно, то у всех сущностей (сделок, контактов, компаний) в разделе "Пользовательские поля" появится поле с названием "Примененные скидочные купоны". Также это поле будет доступно в списке плейсхолдеров, а при добавлении в примечание, значение будет сформировано по шаблону #имя поля#: #значение поля#
.