Скидка по карте — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 21: Строка 21:
 
class discountcardDiscountRule extends discountRule implements orderDiscountRule {
 
class discountcardDiscountRule extends discountRule implements orderDiscountRule {
 
   
 
   
  public function validateOrder(order $order) {
+
public function validateOrder(order $order) {
+
$permissions = permissionsCollection::getInstance();
$permissions = permissionsCollection::getInstance();
+
$currentUserId = $permissions->getUserId();
$currentUserId = $permissions->getUserId();
+
$objects = umiObjectsCollection::getInstance();
$objects = umiObjectsCollection::getInstance();
+
$userObject = $objects->getObject($currentUserId);
$userObject = $objects->getObject($currentUserId);
+
 
+
if ($userObject instanceof umiObject) {
if($userObject instanceof umiObject) {
+
$cardNum = $userObject->getValue("card_discount");  
$cardNum = $userObject->getValue("card_discount");  
+
$nums = new selector ('objects');
$nums = new selector ('objects');
+
$nums->types('object-type')->id('188');
$nums->types('object-type')->id('188');
+
$nums->where('name')->equals($cardNum);
$nums->where('name')->equals($cardNum);
+
$res=$nums->result;
$res=$nums->result;
+
if (count($res)){
if(count($res)){
+
return true;
return true;
+
} else {
}else{
+
return false;
return false;
+
}
 
}
 
}
 
}
 
}
  }
+
}
};
+
 
?>
 
 
</source>
 
</source>
  
 
В данном примере 188 - это id созданного справочника "Скидочные карты" с номерами карт.
 
В данном примере 188 - это id созданного справочника "Скидочные карты" с номерами карт.
 
Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.
 
Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.
 +
 +
Похожим образом можно реализовать скидку использующую промокод вместо карты.
 
[[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]
 
[[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]

Текущая версия на 06:50, 20 мая 2019

Актуально для версии 19.

Задача: активировать скидку, если у пользователя есть дисконтная карта.

Создадим новый справочник "Скидочные карты" в модуле Шаблоны данных вкладка Справочники кнопка "Добавить справочник".
Screenshot 207.png
В этом справочнике будут храниться номера дисконтных карт. Для добавления кода карты необходимо выбрать справочник и нажать кнопку "Посмотреть"
Screenshot 209.png
Далее нужно создать новый тип, дочерний к типу "Правила скидок", назовем его "Скидка по карте".

Screenshot 210.pngScreenshot 208.png
В справочник "Типы правил скидки" необходимо добавить новый элемент с именем "Скидочная карта" для которого указать: Идентификатор - discountcard, Тип данных (id) - нужно указать id созданного ранее типа данных "Скидка по карте", "Допустимые типы скидки" добавить "На заказ"
Screenshot 212.pngScreenshot 211.png
В типе данных "Пользователь" необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) в группу полей "Дополнительная информация" с идентификатором - 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 созданного справочника "Скидочные карты" с номерами карт. Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.

Похожим образом можно реализовать скидку использующую промокод вместо карты.