Public Member Functions | |
collect (Mage_Sales_Model_Quote_Address $address) | |
fetch (Mage_Sales_Model_Quote_Address $address) |
Definition at line 28 of file Discount.php.
collect | ( | Mage_Sales_Model_Quote_Address $ | address | ) |
Collect totals process
Mage_Sales_Model_Quote_Address | $address |
Child item discount we calculate for parent
Composite item discount calculation
Parent free shipping we apply to all children
Reimplemented from Mage_Sales_Model_Quote_Address_Total_Abstract.
Definition at line 30 of file Discount.php.
00031 { 00032 $quote = $address->getQuote(); 00033 $eventArgs = array( 00034 'website_id'=>Mage::app()->getStore($quote->getStoreId())->getWebsiteId(), 00035 'customer_group_id'=>$quote->getCustomerGroupId(), 00036 'coupon_code'=>$quote->getCouponCode(), 00037 ); 00038 00039 $address->setFreeShipping(0); 00040 $totalDiscountAmount = 0; 00041 $subtotalWithDiscount= 0; 00042 $baseTotalDiscountAmount = 0; 00043 $baseSubtotalWithDiscount= 0; 00044 00045 $items = $address->getAllItems(); 00046 if (!count($items)) { 00047 $address->setDiscountAmount($totalDiscountAmount); 00048 $address->setSubtotalWithDiscount($subtotalWithDiscount); 00049 $address->setBaseDiscountAmount($baseTotalDiscountAmount); 00050 $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount); 00051 return $this; 00052 } 00053 00054 $hasDiscount = false; 00055 foreach ($items as $item) { 00056 if ($item->getNoDiscount()) { 00057 $item->setDiscountAmount(0); 00058 $item->setBaseDiscountAmount(0); 00059 $item->setRowTotalWithDiscount($item->getRowTotal()); 00060 $item->setBaseRowTotalWithDiscount($item->getRowTotal()); 00061 00062 $subtotalWithDiscount+=$item->getRowTotal(); 00063 $baseSubtotalWithDiscount+=$item->getBaseRowTotal(); 00064 } 00065 else { 00066 /** 00067 * Child item discount we calculate for parent 00068 */ 00069 if ($item->getParentItemId()) { 00070 continue; 00071 } 00072 00073 /** 00074 * Composite item discount calculation 00075 */ 00076 00077 if ($item->getHasChildren() && $item->isChildrenCalculated()) { 00078 $eventArgs['item'] = $item; 00079 Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs); 00080 if ($item->getDiscountAmount() || $item->getFreeShipping()) { 00081 $hasDiscount = true; 00082 } 00083 foreach ($item->getChildren() as $child) { 00084 $eventArgs['item'] = $child; 00085 Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs); 00086 00087 if ($child->getDiscountAmount() || $child->getFreeShipping()) { 00088 $hasDiscount = true; 00089 } 00090 00091 /** 00092 * Parent free shipping we apply to all children 00093 */ 00094 if ($item->getFreeShipping()) { 00095 $child->setFreeShipping($item->getFreeShipping()); 00096 } 00097 00098 /** 00099 * @todo Parent discount we apply for all children without discount 00100 */ 00101 if (!$child->getDiscountAmount() && $item->getDiscountPercent()) { 00102 00103 } 00104 $totalDiscountAmount += $child->getDiscountAmount();//*$item->getQty(); 00105 $baseTotalDiscountAmount += $child->getBaseDiscountAmount();//*$item->getQty(); 00106 00107 $child->setRowTotalWithDiscount($child->getRowTotal()-$child->getDiscountAmount()); 00108 $child->setBaseRowTotalWithDiscount($child->getBaseRowTotal()-$child->getBaseDiscountAmount()); 00109 00110 $subtotalWithDiscount+=$child->getRowTotalWithDiscount(); 00111 $baseSubtotalWithDiscount+=$child->getBaseRowTotalWithDiscount(); 00112 } 00113 } 00114 else { 00115 $eventArgs['item'] = $item; 00116 Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs); 00117 00118 if ($item->getDiscountAmount() || $item->getFreeShipping()) { 00119 $hasDiscount = true; 00120 } 00121 $totalDiscountAmount += $item->getDiscountAmount(); 00122 $baseTotalDiscountAmount += $item->getBaseDiscountAmount(); 00123 00124 $item->setRowTotalWithDiscount($item->getRowTotal()-$item->getDiscountAmount()); 00125 $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal()-$item->getBaseDiscountAmount()); 00126 00127 $subtotalWithDiscount+=$item->getRowTotalWithDiscount(); 00128 $baseSubtotalWithDiscount+=$item->getBaseRowTotalWithDiscount(); 00129 } 00130 } 00131 } 00132 $address->setDiscountAmount($totalDiscountAmount); 00133 $address->setSubtotalWithDiscount($subtotalWithDiscount); 00134 $address->setBaseDiscountAmount($baseTotalDiscountAmount); 00135 $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount); 00136 00137 $address->setGrandTotal($address->getGrandTotal() - $address->getDiscountAmount()); 00138 $address->setBaseGrandTotal($address->getBaseGrandTotal()-$address->getBaseDiscountAmount()); 00139 return $this; 00140 }
fetch | ( | Mage_Sales_Model_Quote_Address $ | address | ) |
Fetch (Retrieve data as array)
Mage_Sales_Model_Quote_Address | $address |
Reimplemented from Mage_Sales_Model_Quote_Address_Total_Abstract.
Definition at line 142 of file Discount.php.
00143 { 00144 $amount = $address->getDiscountAmount(); 00145 if ($amount!=0) { 00146 $title = Mage::helper('sales')->__('Discount'); 00147 if ($code = $address->getCouponCode()) { 00148 $title = Mage::helper('sales')->__('Discount (%s)', $code); 00149 } 00150 $address->addTotal(array( 00151 'code'=>$this->getCode(), 00152 'title'=>$title, 00153 'value'=>-$amount 00154 )); 00155 } 00156 return $this; 00157 }