/** * Returns discount list instance * * @return oxDiscountList */ public static function getInstance() { // disable cashing for test modules if (defined('OXID_PHP_UNIT')) { self::$_instance = modInstances::getMod(__CLASS__); } if (!isset(self::$_instance)) { // allow modules self::$_instance = oxNew('oxDiscountList'); if (defined('OXID_PHP_UNIT')) { modInstances::addMod(__CLASS__, self::$_instance); } } return self::$_instance; }
/** * Loads basket discounts and calculates discount values. * * @return null */ protected function _calcBasketDiscount() { // resetting $this->_aDiscounts = array(); // P using prices sum which has discount, not sum of skipped discounts $dOldprice = $this->_oDiscountProductsPriceList->getBruttoSum(); // add basket discounts $aDiscounts = oxDiscountList::getInstance()->getBasketDiscounts($this, $this->getBasketUser()); foreach ($aDiscounts as $oDiscount) { // storing applied discounts $oStdDiscount = $oDiscount->getSimpleDiscount(); // skipping bundle discounts if ($oDiscount->oxdiscount__oxaddsumtype->value == 'itm') { continue; } // saving discount info $oStdDiscount->dDiscount = $oDiscount->getAbsValue($dOldprice); if ($dOldprice < $oStdDiscount->dDiscount) { $oStdDiscount->dDiscount = $dOldprice; } if ($oStdDiscount->dDiscount != 0) { $this->_aDiscounts[$oDiscount->getId()] = $oStdDiscount; // substracting product price after discount $dOldprice = $dOldprice - $oStdDiscount->dDiscount; } } }
/** * Applies discounts which should be applied in general case (for 0 amount) * * @param oxprice $oPrice Price object * * @return null */ public function applyDiscountsForVariant($oPrice) { // apply discounts if (!$this->skipDiscounts()) { $oDiscountList = oxDiscountList::getInstance(); $oDiscountList->applyDiscounts($oPrice, $oDiscountList->getArticleDiscounts($this, $this->getArticleUser())); } }