Этот метод при расчёте скидок по правилам работы с корзиной учитывает группы пользователя в базе.
$groupDiscountIterator = Internals\DiscountGroupTable::getList(array(
'select' => array('DISCOUNT_ID'),
'filter' => array('@GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID']), '=ACTIVE' => 'Y')
));
|
Что не даёт по определённым условиям управлять скидками. Как пример, недавняя задача:
Для людей которые бросили корзину(так и не войдя в систему) в гугле получают ссылку с информацией о скидки 5%. Скидка применяется к условной группе. По урлу захода на сайт эта группа назначается нашему анонимному, пока анонимному, пользователю что бы тот получил свою законную скидку. Но вот беда, DoProcessOrder не понимает группы в сессии пользователя и следовательно не применяется скидка.
Я понимаю что это сделано что бы если в срочном порядке пользователя лишили группы, (допустим золотые покупатели) он не получал из сессии принадлежность и соответственно скидку.
Нужно как то этот вопрос решить. Моё видение ситуации следующее:
Сделать встроенный хендлер на изменение пользователя который бы регистрировал изменение пользователя, а при загрузке страницы проверять - были ли изменения. если нет берём данные из сессии, иначе обновляем данные в сессии беря их бд.
А в нашем DoProcessOrder брать группы пользователя из сессии. Это позволило бы
и рыбку съесть и ...и гибко использовать группы для анонимных юзеров и держать актуальные данные в сессии.
Мой алгоритм - всего лишь примитивный пример реализации, уверен вы сможете сделать это более элегантно.