Правила работы с корзиной, CSaleDiscount::DoProcessOrder()

Рейтинг: 2.3532  
Отложено
Предложил Корнев Андрей 18.12.2015 22:47:29

Правила работы с корзиной, CSaleDiscount::DoProcessOrder()

Этот метод при расчёте скидок по правилам работы с корзиной учитывает группы пользователя в базе.

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

Я понимаю что это сделано что бы если в срочном порядке пользователя лишили группы, (допустим золотые покупатели) он не получал из сессии принадлежность и соответственно скидку.

Нужно как то этот вопрос решить.  Моё видение ситуации следующее:
Сделать встроенный хендлер на изменение пользователя который бы регистрировал изменение пользователя, а при загрузке страницы проверять - были ли изменения. если нет берём данные из сессии, иначе обновляем данные в сессии беря их бд.

А в нашем DoProcessOrder брать группы пользователя из сессии. Это позволило бы и рыбку съесть и ...
и гибко использовать группы для анонимных юзеров и держать актуальные данные в сессии.
Мой алгоритм - всего лишь примитивный пример реализации, уверен вы сможете сделать это более элегантно.  
Рейтинг: 0  
Ответил Жуков Евгений 22.01.2018 15:38:45
Это было сделано для того, чтобы заказ, оформленный клиентом из публички, и заказ, оформленный для того же клиента менеджером, были идентичными. Эта политика меняться не будет, более того, в новом провайдере работа с группами пользователя стала такой же (данные сессии игнорируются).

Рейтинг: 0.0815  
Зайцев Артемий 20.12.2015 00:52:49