private:koding:hostcms:modules:shop:useful:discount

Скидка по купону, зависящая от количества товаров в заказе

Для того, чтобы сделать скидку, зависящую от количества товаров в заказе, необходимо:

  1. Добавить скидку от суммы заказа с требуемой величиной.
  2. Создать констунту с именем SHOP_ITEM_DISCOUNT_ID и задать ей значение, равное коду добавленной скидки.
  3. Переопределить метод show класса Shop_Cart_Controller_Show в настройках ТДС корзины с помощью наследования, код метода взять из стантартного класса и внести следующие изменения:
    <?php
     
    class Shop_Cart_Controller_Show_Extended extends Shop_Cart_Controller_Show
    {
       	// ...
     
    	public function show()
    	{
    		// ...	
     
    		$aShop_Purchase_Discounts = $oShop_Purchase_Discount_Controller->getDiscounts();
    		foreach ($aShop_Purchase_Discounts as $oShop_Purchase_Discount)
    		{
    			/**
    			* 
    			* Пересчет скидки по формуле: количество товаров * SHOP_ITEM_DISCOUNT 
    			*
    			* @author Zasorin Maksim, KAD Systems (©) 2015	
    			* @date 23-09-2015	
    			* Начало >>
    			*/
    			if (
    					defined('SHOP_ITEM_DISCOUNT_ID')
    					&&
    					$oShop_Purchase_Discount->id == SHOP_ITEM_DISCOUNT_ID
    				)
    			{
    				$discountAmount = $oShop_Purchase_Discount->getDiscountAmount();
    				$oShop_Purchase_Discount->discountAmount($discountAmount * $quantity);
    			}
    			/**
    			* << Конец 
    			* @author Zasorin Maksim, KAD Systems (©) 2015	
    			* @date 23-09-2015
    			*/
     
    			$this->addEntity($oShop_Purchase_Discount->clearEntities());
    			$totalDiscount += $oShop_Purchase_Discount->getDiscountAmount();
    		}
     
    		// ...
     
    		return Core_Controller::show();
    	}
      	// ...
    }
  4. Переопределить метод _addPurchaseDiscount в обработчиках платежных систем, код взять из стандартного обработчика и внести следующие изменения:
    <?php
     
    class Shop_Payment_System_HandlerXX extends Shop_Payment_System_Handler
    {
      	//...
     
    	protected function _addPurchaseDiscount($amount, $quantity)
    	{
    		// ...
     
    		$aShop_Purchase_Discounts = $oShop_Purchase_Discount_Controller->getDiscounts();
    		foreach ($aShop_Purchase_Discounts as $oShop_Purchase_Discount)
    		{
    			/**
    			* 
    			* Пересчет скидки по формуле: количество товаров * SHOP_ITEM_DISCOUNT 
    			*
    			* @author Zasorin Maksim, KAD Systems (©) 2015	
    			* @date 23-09-2015	
    			* Начало >>
    			*/
    			if (
    					defined('SHOP_ITEM_DISCOUNT_ID')
    					&&
    					$oShop_Purchase_Discount->id == SHOP_ITEM_DISCOUNT_ID
    				)
    			{
    				$discountAmount = $oShop_Purchase_Discount->getDiscountAmount();
    				$oShop_Purchase_Discount->discountAmount($discountAmount * $quantity);
    			}
    			/**
    			* << Конец 
    			* @author Zasorin Maksim, KAD Systems (©) 2015	
    			* @date 23-09-2015
    			*/
     
    			$oShop_Order_Item = Core_Entity::factory('Shop_Order_Item');
    			$oShop_Order_Item->name = $oShop_Purchase_Discount->name;
    			$oShop_Order_Item->quantity = 1;
     
    			$discountAmount = $oShop_Purchase_Discount->getDiscountAmount();
     
    			// ...
    		}
     
              	// ...
    	}
private/koding/hostcms/modules/shop/useful/discount.txt · Last modified: 27.06.17 в 15:57 by maximzasorin_gmail.com