если у Вас 1 купон, то зачем что то выдумывать? Просто выведите код купона при выполнении нужных вам условий.
Можно вообще генерировать новый купон для каждого нового пользователя и уже потом выводить его. например так:
$coupon = DiscountCouponTable::generateCoupon(true);
//$activeFrom = new \Bitrix\Main\Type\DateTime;
//$activeTo = clone $activeFrom;
$addDb = DiscountCouponTable::add(array(
'DISCOUNT_ID' => $saleDiscountId,//ID скидки
//'ACTIVE_FROM' => $activeFrom,
//'ACTIVE_TO' => $activeTo->add('+365 days'),
'COUPON' => $coupon,
'TYPE' => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER,
'MAX_USE' => 1,
'USER_ID' => $USER->GetID(),
'DESCRIPTION' => 'описание купона',
));
Если есть сомнения в том условия вывода купона на страницу, то можно пойти другим путём.
- Регистрируйте пользователя
- На событии
OnAfterUserAdd создавайте купон и отправляйте письмо через CEvent::Send. В нём пользователь получит и подтверждение регистрации и купон со скидкой.