energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file Discounts.class.php

Documentation is available at Discounts.class.php

  1. <?php
  2. /**
  3.  * Содержит класс Discounts
  4.  *
  5.  * @package energine
  6.  * @subpackage shop
  7.  * @author 1m.dm
  8.  * @copyright ColoCall 2006
  9.  * @version $Id$
  10.  */
  11.  
  12. //require_once('core/framework/DBWorker.class.php');
  13. //require_once('core/framework/AuthUser.class.php');
  14.  
  15. /**
  16.  * Скидочки ))
  17.  *
  18.  * @package energine
  19.  * @subpackage shop
  20.  * @author 1m.dm
  21.  */
  22. class Discounts extends DBWorker {
  23.  
  24.     /**
  25.      * @access private
  26.      * @static
  27.      * @var Discounts единый для всей системы экземпляр класса Discounts
  28.      */
  29.     private static $instance;
  30.  
  31.     /**
  32.      * @access private
  33.      * @var string имя таблицы скидок в БД
  34.      */
  35.     private $tableName;
  36.  
  37.     /**
  38.      * @access private
  39.      * @var int идентификатор текущей группы пользователей
  40.      */
  41.     private $currentGroupId;
  42.  
  43.     /**
  44.      * @access private
  45.      * @var int процент скидки для текущей группы
  46.      */
  47.     private $currentGroupDiscount;
  48.  
  49.     /**
  50.      * Конструктор класса.
  51.      *
  52.      * @access public
  53.      * @return void 
  54.      */
  55.     public function __construct({
  56.         parent::__construct();
  57.         $this->tableName = 'shop_discounts';
  58.         $this->setCurrentGroup($this->getDefaultGroup());
  59.     }
  60.  
  61.     /**
  62.      * Возвращает единый для всей системы экземпляр класса Discount.
  63.      *
  64.      * @access public
  65.      * @static
  66.      * @return Basket 
  67.      */
  68.     public static function getInstance({
  69.         if (!isset(self::$instance)) {
  70.             self::$instance new Discounts;
  71.         }
  72.         return self::$instance;
  73.     }
  74.  
  75.     /**
  76.      * Возвращает имя таблицы скидок.
  77.      *
  78.      * @access protected
  79.      * @return string 
  80.      */
  81.     protected function getTableName({
  82.         return $this->tableName;
  83.     }
  84.  
  85.     /**
  86.      * Устанавливает текущую группу, которая используется системой скидок для
  87.      * расчетов окончательной стоимости.
  88.      *
  89.      * @access public
  90.      * @param int $groupId 
  91.      * @return void 
  92.      */
  93.     public function setCurrentGroup($groupId{
  94.         $this->currentGroupId = intval($groupId);
  95.         $this->currentGroupDiscount = $this->getDiscountForGroup($this->currentGroupId);
  96.     }
  97.  
  98.     /**
  99.      * Возвращает процент скидки для указанной группы.
  100.      * Если группа не указана - используется группа по-умолчанию.
  101.      * Если скидка для группы не определена - возвращается 0;
  102.      *
  103.      * @access public
  104.      * @param int $groupId 
  105.      * @return int 
  106.      */
  107.     public function getDiscountForGroup($groupId null{
  108.         if (!isset($groupId)) {
  109.             $groupId $this->currentGroupId;
  110.         }
  111.  
  112.         $result $this->dbh->select($this->tableName'dscnt_percent'array('group_id' => intval($groupId)));
  113.         if (is_array($result)) {
  114.             return intval($result[0]['dscnt_percent']);
  115.         }
  116.         return 0;
  117.     }
  118.  
  119.     /**
  120.      * Возвращает группу по-умолчанию для текущего пользователя.
  121.      * Группой по-умолчанию считается такая группа пользователя,
  122.      * для которой установлен наибольший размер скидки.
  123.      *
  124.      * @access public
  125.      * @return int 
  126.      */
  127.     public function getDefaultGroup({
  128.         $authUser AuthUser::getInstance();
  129.         $userGroups $authUser->getGroups();
  130.         $discounts $this->dbh->select($this->tableNamearray('group_id''dscnt_percent'));
  131.         $discounts convertDBResult($discounts'group_id'true);
  132.         // Группа с наибольшей скидкой используется по-умолчанию.
  133.         $maxDiscount 0;
  134.         $defaultGroup 0;
  135.         foreach ($userGroups as $groupId{
  136.             if (isset($discounts[$groupId])) {
  137.                 $discount intval($discounts[$groupId]['dscnt_percent']);
  138.                 if ($discount $maxDiscount{
  139.                     $maxDiscount $discount;
  140.                     $defaultGroup $groupId;
  141.                 }
  142.             }
  143.         }
  144.         return $defaultGroup;
  145.     }
  146.  
  147.     /**
  148.      * Расчитывает окончательную стоимость для указанной цены,
  149.      * основываясь на проценте скидки для текущей группы.
  150.      *
  151.      * @access public
  152.      * @param float $price 
  153.      * @return float 
  154.      */
  155.     public function calculateCost($price{
  156.         $price floatval($price);
  157.         $cost $price ($this->currentGroupDiscount / 100);
  158.         return $cost;
  159.     }
  160. }
В создании документации нам помог: phpDocumentor