Скидка по карте
Актуально для версии 19.
Задача: активировать скидку, если у пользователя есть дисконтная карта.
Создадим новый справочник "Скидочные карты" в модуле Шаблоны данных вкладка Справочники кнопка "Добавить справочник".
В этом справочнике будут храниться номера дисконтных карт. Для добавления кода карты необходимо выбрать справочник и нажать кнопку "Посмотреть"
Далее нужно создать новый тип, дочерний к типу "Правила скидок", назовем его "Скидка по карте".
В справочник "Типы правил скидки" необходимо добавить новый элемент с именем "Скидочная карта" для которого указать:
Идентификатор - discountcard, Тип данных (id) - нужно указать id созданного ранее типа данных "Скидка по карте", "Допустимые типы скидки" добавить "На заказ"
В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) в группу полей Дополнительная информация. В примере - card_discount.
При создании новой скидки выберем тип "На заказ" и в качестве правила скидки - созданное выше. В файле /classes/modules/emarket/classes/discounts/rules/discountcard.php (его необходимо создать) пишем следующий код:
<?php
class discountcardDiscountRule extends discountRule implements orderDiscountRule {
public function validateOrder(order $order) {
$permissions = permissionsCollection::getInstance();
$currentUserId = $permissions->getUserId();
$objects = umiObjectsCollection::getInstance();
$userObject = $objects->getObject($currentUserId);
if($userObject instanceof umiObject) {
$cardNum = $userObject->getValue("card_discount");
$nums = new selector ('objects');
$nums->types('object-type')->id('188');
$nums->where('name')->equals($cardNum);
$res=$nums->result;
if(count($res)){
return true;
}else{
return false;
}
}
}
};
?>
В данном примере 188 - это id созданного справочника "Скидочные карты" с номерами карт. Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.