Overview

Packages

  • currencysymbol
  • MAbout
  • Mage
    • Admin
    • Adminhtml
    • AdminNotification
    • Api
    • Api2
    • Authorizenet
    • Backup
    • Bundle
    • Captcha
    • Catalog
    • CatalogIndex
    • CatalogInventory
    • CatalogRule
    • CatalogSearch
    • Centinel
    • Checkout
    • Cms
    • Compiler
    • Connect
    • Contacts
    • Core
    • Cron
    • CurrencySymbol
    • Customer
    • Dataflow
    • Directory
    • DirtectPost
    • Downloadable
    • Eav
    • GiftMessage
    • GoogleAnalytics
    • GoogleBase
    • GoogleCheckout
    • ImportExport
    • Index
    • Install
    • Log
    • Media
    • Newsletter
    • Oauth
    • Page
    • PageCache
    • Paygate
    • Payment
    • Paypal
    • PaypalUk
    • Persistent
    • Poll
    • ProductAlert
    • Rating
    • Reports
    • Review
    • Rss
    • Rule
    • Sales
    • SalesRule
    • Sedfriend
    • Sendfriend
    • Shipping
    • Sitemap
    • Tag
    • Tax
    • Usa
    • Weee
    • Widget
    • Wishlist
    • XmlConnect
  • None
  • Phoenix
    • Moneybookers
  • PHP
  • Zend
    • Date
    • Mime
    • XmlRpc

Classes

  • Mage_SalesRule_Exception
  • Mage_SalesRule_Helper_Coupon
  • Mage_SalesRule_Helper_Data
  • Mage_SalesRule_Model_Coupon
  • Mage_SalesRule_Model_Coupon_Codegenerator
  • Mage_SalesRule_Model_Coupon_Massgenerator
  • Mage_SalesRule_Model_Mysql4_Coupon
  • Mage_SalesRule_Model_Mysql4_Coupon_Collection
  • Mage_SalesRule_Model_Mysql4_Coupon_Usage
  • Mage_SalesRule_Model_Mysql4_Report_Collection
  • Mage_SalesRule_Model_Mysql4_Report_Rule
  • Mage_SalesRule_Model_Mysql4_Report_Updatedat_Collection
  • Mage_SalesRule_Model_Mysql4_Rule
  • Mage_SalesRule_Model_Mysql4_Rule_Collection
  • Mage_SalesRule_Model_Mysql4_Rule_Customer
  • Mage_SalesRule_Model_Mysql4_Rule_Customer_Collection
  • Mage_SalesRule_Model_Mysql4_Rule_Product
  • Mage_SalesRule_Model_Mysql4_Rule_Product_Collection
  • Mage_SalesRule_Model_Observer
  • Mage_SalesRule_Model_Quote_Discount
  • Mage_SalesRule_Model_Quote_Freeshipping
  • Mage_SalesRule_Model_Quote_Nominal_Discount
  • Mage_SalesRule_Model_Resource_Coupon
  • Mage_SalesRule_Model_Resource_Coupon_Collection
  • Mage_SalesRule_Model_Resource_Coupon_Usage
  • Mage_SalesRule_Model_Resource_Report_Collection
  • Mage_SalesRule_Model_Resource_Report_Rule
  • Mage_SalesRule_Model_Resource_Report_Rule_Createdat
  • Mage_SalesRule_Model_Resource_Report_Rule_Updatedat
  • Mage_SalesRule_Model_Resource_Report_Updatedat_Collection
  • Mage_SalesRule_Model_Resource_Rule
  • Mage_SalesRule_Model_Resource_Rule_Collection
  • Mage_SalesRule_Model_Resource_Rule_Customer
  • Mage_SalesRule_Model_Resource_Rule_Customer_Collection
  • Mage_SalesRule_Model_Resource_Rule_Product
  • Mage_SalesRule_Model_Resource_Rule_Product_Collection
  • Mage_SalesRule_Model_Rule
  • Mage_SalesRule_Model_Rule_Action_Collection
  • Mage_SalesRule_Model_Rule_Action_Product
  • Mage_SalesRule_Model_Rule_Condition_Address
  • Mage_SalesRule_Model_Rule_Condition_Combine
  • Mage_SalesRule_Model_Rule_Condition_Product
  • Mage_SalesRule_Model_Rule_Condition_Product_Combine
  • Mage_SalesRule_Model_Rule_Condition_Product_Found
  • Mage_SalesRule_Model_Rule_Condition_Product_Subselect
  • Mage_SalesRule_Model_Rule_Customer
  • Mage_SalesRule_Model_Rule_Product
  • Mage_SalesRule_Model_System_Config_Source_Coupon_Format
  • Mage_SalesRule_Model_Validator

Interfaces

  • Mage_SalesRule_Model_Coupon_CodegeneratorInterface
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Magento
  4:  *
  5:  * NOTICE OF LICENSE
  6:  *
  7:  * This source file is subject to the Open Software License (OSL 3.0)
  8:  * that is bundled with this package in the file LICENSE.txt.
  9:  * It is also available through the world-wide-web at this URL:
 10:  * http://opensource.org/licenses/osl-3.0.php
 11:  * If you did not receive a copy of the license and are unable to
 12:  * obtain it through the world-wide-web, please send an email
 13:  * to license@magentocommerce.com so we can send you a copy immediately.
 14:  *
 15:  * DISCLAIMER
 16:  *
 17:  * Do not edit or add to this file if you wish to upgrade Magento to newer
 18:  * versions in the future. If you wish to customize Magento for your
 19:  * needs please refer to http://www.magentocommerce.com for more information.
 20:  *
 21:  * @category    Mage
 22:  * @package     Mage_SalesRule
 23:  * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 24:  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 25:  */
 26: 
 27: 
 28: class Mage_SalesRule_Model_Quote_Discount extends Mage_Sales_Model_Quote_Address_Total_Abstract
 29: {
 30:     /**
 31:      * Discount calculation object
 32:      *
 33:      * @var Mage_SalesRule_Model_Validator
 34:      */
 35:     protected $_calculator;
 36: 
 37:     public function __construct()
 38:     {
 39:         $this->setCode('discount');
 40:         $this->_calculator = Mage::getSingleton('salesrule/validator');
 41:     }
 42: 
 43:     /**
 44:      * Collect address discount amount
 45:      *
 46:      * @param   Mage_Sales_Model_Quote_Address $address
 47:      * @return  Mage_SalesRule_Model_Quote_Discount
 48:      */
 49:     public function collect(Mage_Sales_Model_Quote_Address $address)
 50:     {
 51:         parent::collect($address);
 52:         $quote = $address->getQuote();
 53:         $store = Mage::app()->getStore($quote->getStoreId());
 54:         $this->_calculator->reset($address);
 55: 
 56:         $items = $this->_getAddressItems($address);
 57:         if (!count($items)) {
 58:             return $this;
 59:         }
 60: 
 61:         $eventArgs = array(
 62:             'website_id'        => $store->getWebsiteId(),
 63:             'customer_group_id' => $quote->getCustomerGroupId(),
 64:             'coupon_code'       => $quote->getCouponCode(),
 65:         );
 66: 
 67:         $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode());
 68:         $this->_calculator->initTotals($items, $address);
 69: 
 70:         $address->setDiscountDescription(array());
 71: 
 72:         foreach ($items as $item) {
 73:             if ($item->getNoDiscount()) {
 74:                 $item->setDiscountAmount(0);
 75:                 $item->setBaseDiscountAmount(0);
 76:             }
 77:             else {
 78:                 /**
 79:                  * Child item discount we calculate for parent
 80:                  */
 81:                 if ($item->getParentItemId()) {
 82:                     continue;
 83:                 }
 84: 
 85:                 $eventArgs['item'] = $item;
 86:                 Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);
 87: 
 88:                 if ($item->getHasChildren() && $item->isChildrenCalculated()) {
 89:                     foreach ($item->getChildren() as $child) {
 90:                         $this->_calculator->process($child);
 91:                         $eventArgs['item'] = $child;
 92:                         Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);
 93:                         $this->_aggregateItemDiscount($child);
 94:                     }
 95:                 } else {
 96:                     $this->_calculator->process($item);
 97:                     $this->_aggregateItemDiscount($item);
 98:                 }
 99:             }
100:         }
101: 
102:         /**
103:          * Process shipping amount discount
104:          */
105:         $address->setShippingDiscountAmount(0);
106:         $address->setBaseShippingDiscountAmount(0);
107:         if ($address->getShippingAmount()) {
108:             $this->_calculator->processShippingAmount($address);
109:             $this->_addAmount(-$address->getShippingDiscountAmount());
110:             $this->_addBaseAmount(-$address->getBaseShippingDiscountAmount());
111:         }
112: 
113:         $this->_calculator->prepareDescription($address);
114:         return $this;
115:     }
116: 
117:     /**
118:      * Aggregate item discount information to address data and related properties
119:      *
120:      * @param   Mage_Sales_Model_Quote_Item_Abstract $item
121:      * @return  Mage_SalesRule_Model_Quote_Discount
122:      */
123:     protected function _aggregateItemDiscount($item)
124:     {
125:         $this->_addAmount(-$item->getDiscountAmount());
126:         $this->_addBaseAmount(-$item->getBaseDiscountAmount());
127:         return $this;
128:     }
129: 
130:     /**
131:      * Add discount total information to address
132:      *
133:      * @param   Mage_Sales_Model_Quote_Address $address
134:      * @return  Mage_SalesRule_Model_Quote_Discount
135:      */
136:     public function fetch(Mage_Sales_Model_Quote_Address $address)
137:     {
138:         $amount = $address->getDiscountAmount();
139: 
140:         if ($amount!=0) {
141:             $description = $address->getDiscountDescription();
142:             if (strlen($description)) {
143:                 $title = Mage::helper('sales')->__('Discount (%s)', $description);
144:             } else {
145:                 $title = Mage::helper('sales')->__('Discount');
146:             }
147:             $address->addTotal(array(
148:                 'code'  => $this->getCode(),
149:                 'title' => $title,
150:                 'value' => $amount
151:             ));
152:         }
153:         return $this;
154:     }
155: }
156: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0