Скидка на день рожденье
С помощью данной функции можно применять скидки на товары в день рожденья зарегистрированного пользователя Битрикс, работает только на редакции Малый бизнес и Бизнес
Данную функцию нужно поставить выполняться на агента
(1.Настройки -> 2. Настройки продукта 3. Агенты),

создать группу с именинниками и присвоить переменной $HAPPY_GROUP_ID id созданной группы,
указать сколько дней до и сколько дней после пользователь должен принадлежать группе именинники
$HAPPY_GROUP_ID = 9; /* Группа со скидкой в день рожденья */
$DAY_BEFORE = 20; /* Дней до дня рождения */
$DAY_AFTER = 20; /* Дней после дня рожденья */
после этого, нужно создать скидку в правилах работы с корзиной
(1. Маркетинг -> 2.Товарный маркетинг -> 3.Правила работы с корзиной )

и добавить ограничение на группу пользователей

<? function AutoUserGroup(){ $HAPPY_GROUP_ID = 9; /* Группа со скидкой в день рожденья */ $DAY_BEFORE = 20; /* Дней до дня рождения */ $DAY_AFTER = 20; /* Дней после дня рожденья */ $DAY_BEFORE = $DAY_BEFORE * 24 * 60 * 60; $DAY_AFTER = $DAY_AFTER * 24 * 60 * 60; $filter = Array( "ACTIVE" => "Y", ); $select = array( 'ID', 'PERSONAL_BIRTHDAY', 'GROUP_ID', ); global $USER; $rsUsers = CUser::GetList($by = "NAME", $order = "desc", $filter, array('select' => $select)); while ($arUser = $rsUsers->Fetch()) { $arSpecUser[] = $arUser; } foreach ($arSpecUser as $oneUser){ $pattern = '/(\.[0-9]+)$/m'; $replacement = ''; if (!empty(oneUser['PERSONAL_BIRTHDAY'])) { $oneUser['PERSONAL_BIRTHDAY'] = preg_replace($pattern, $replacement, $oneUser['PERSONAL_BIRTHDAY']) . '.' . date('Y'); } if(!empty($oneUser['PERSONAL_BIRTHDAY']) && strtotime($oneUser['PERSONAL_BIRTHDAY']) >= strtotime(date('m.d.y')) - $DAY_AFTER && strtotime($oneUser['PERSONAL_BIRTHDAY']) <= strtotime(date('m.d.y')) + $DAY_BEFORE){ $groupUser = CUser::GetUserGroup($oneUser['ID']); if (!in_array($HAPPY_GROUP_ID, $groupUser)){ $groupUser[] = $HAPPY_GROUP_ID; $arFields = [ 'GROUP_ID' => $groupUser, ]; $USER->Update($oneUser['ID'], $arFields); } }else{ $groupUser = CUser::GetUserGroup($oneUser['ID']); if (in_array($HAPPY_GROUP_ID, $groupUser)){ $groupUser = array_flip($groupUser); unset($groupUser[$HAPPY_GROUP_ID]); $groupUser = array_flip($groupUser); $arFields = [ 'GROUP_ID' => $groupUser, ]; $USER->Update($oneUser['ID'], $arFields); } } } return 'AutoUserGroup()'; }