Mage_Sales_Model_Quote_Address_Total_Shipping Class Reference

Inheritance diagram for Mage_Sales_Model_Quote_Address_Total_Shipping:

Mage_Sales_Model_Quote_Address_Total_Abstract

List of all members.

Public Member Functions

 collect (Mage_Sales_Model_Quote_Address $address)
 fetch (Mage_Sales_Model_Quote_Address $address)


Detailed Description

Definition at line 28 of file Shipping.php.


Member Function Documentation

collect ( Mage_Sales_Model_Quote_Address address  ) 

Collect totals process

Parameters:
Mage_Sales_Model_Quote_Address $address
Returns:
Mage_Sales_Model_Quote_Address_Total_Abstract

Skip if this item is virtual

Children weight we calculate for parent

Reimplemented from Mage_Sales_Model_Quote_Address_Total_Abstract.

Definition at line 30 of file Shipping.php.

00031     {
00032         $oldWeight = $address->getWeight();
00033         $address->setWeight(0);
00034         $address->setShippingAmount(0);
00035         $address->setBaseShippingAmount(0);
00036         $address->setFreeMethodWeight(0);
00037 
00038         $items = $address->getAllItems();
00039         if (!count($items)) {
00040             return $this;
00041         }
00042 
00043         $method = $address->getShippingMethod();
00044         $freeAddress = $address->getFreeShipping();
00045 
00046         $addressWeight      = $address->getWeight();
00047         $freeMethodWeight   = $address->getFreeMethodWeight();
00048 
00049         $addressQty = 0;
00050 
00051         foreach ($items as $item) {
00052             /**
00053              * Skip if this item is virtual
00054              */
00055 
00056             if ($item->getProduct()->isVirtual()) {
00057                 continue;
00058             }
00059             /**
00060              * Children weight we calculate for parent
00061              */
00062             if ($item->getParentItem()) {
00063                 continue;
00064             }
00065 
00066             if ($item->getHasChildren() && $item->isShipSeparately()) {
00067                 foreach ($item->getChildren() as $child) {
00068                     if ($child->getProduct()->isVirtual()) {
00069                         continue;
00070                     }
00071                     $addressQty += $item->getQty()*$child->getQty();
00072 
00073                     if (!$item->getProduct()->getWeightType()) {
00074                         $itemWeight = $child->getWeight();
00075                         $itemQty    = $item->getQty()*$child->getQty();
00076                         $rowWeight  = $itemWeight*$itemQty;
00077                         $addressWeight += $rowWeight;
00078                         if ($freeAddress || $child->getFreeShipping()===true) {
00079                             $rowWeight = 0;
00080                         } elseif (is_numeric($child->getFreeShipping())) {
00081                             $freeQty = $child->getFreeShipping();
00082                             if ($itemQty>$freeQty) {
00083                                 $rowWeight = $itemWeight*($itemQty-$freeQty);
00084                             }
00085                             else {
00086                                 $rowWeight = 0;
00087                             }
00088                         }
00089                         $freeMethodWeight += $rowWeight;
00090                         $item->setRowWeight($rowWeight);
00091                     }
00092                 }
00093                 if ($item->getProduct()->getWeightType()) {
00094                     $itemWeight = $item->getWeight();
00095                     $rowWeight  = $itemWeight*$item->getQty();
00096                     $addressWeight+= $rowWeight;
00097                     if ($freeAddress || $item->getFreeShipping()===true) {
00098                         $rowWeight = 0;
00099                     } elseif (is_numeric($item->getFreeShipping())) {
00100                         $freeQty = $item->getFreeShipping();
00101                         if ($item->getQty()>$freeQty) {
00102                             $rowWeight = $itemWeight*($item->getQty()-$freeQty);
00103                         }
00104                         else {
00105                             $rowWeight = 0;
00106                         }
00107                     }
00108                     $freeMethodWeight+= $rowWeight;
00109                     $item->setRowWeight($rowWeight);
00110                 }
00111             }
00112             else {
00113                 if (!$item->getProduct()->isVirtual()) {
00114                     $addressQty += $item->getQty();
00115                 }
00116                 $itemWeight = $item->getWeight();
00117                 $rowWeight  = $itemWeight*$item->getQty();
00118                 $addressWeight+= $rowWeight;
00119                 if ($freeAddress || $item->getFreeShipping()===true) {
00120                     $rowWeight = 0;
00121                 } elseif (is_numeric($item->getFreeShipping())) {
00122                     $freeQty = $item->getFreeShipping();
00123                     if ($item->getQty()>$freeQty) {
00124                         $rowWeight = $itemWeight*($item->getQty()-$freeQty);
00125                     }
00126                     else {
00127                         $rowWeight = 0;
00128                     }
00129                 }
00130                 $freeMethodWeight+= $rowWeight;
00131                 $item->setRowWeight($rowWeight);
00132             }
00133         }
00134 
00135         if (isset($addressQty)) {
00136             $address->setItemQty($addressQty);
00137         }
00138 
00139         $address->setWeight($addressWeight);
00140         $address->setFreeMethodWeight($freeMethodWeight);
00141 
00142         $address->collectShippingRates();
00143 
00144         $address->setShippingAmount(0);
00145         $address->setBaseShippingAmount(0);
00146 
00147         $method = $address->getShippingMethod();
00148 
00149         if ($method) {
00150             foreach ($address->getAllShippingRates() as $rate) {
00151                 if ($rate->getCode()==$method) {
00152                     $amountPrice = $address->getQuote()->getStore()->convertPrice($rate->getPrice(), false);
00153                     $address->setShippingAmount($amountPrice);
00154                     $address->setBaseShippingAmount($rate->getPrice());
00155                     $address->setShippingDescription($rate->getCarrierTitle().' - '.$rate->getMethodTitle());
00156                     break;
00157                 }
00158             }
00159         }
00160 
00161         $address->setGrandTotal($address->getGrandTotal() + $address->getShippingAmount());
00162         $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseShippingAmount());
00163         return $this;
00164     }

fetch ( Mage_Sales_Model_Quote_Address address  ) 

Fetch (Retrieve data as array)

Parameters:
Mage_Sales_Model_Quote_Address $address
Returns:
array

Reimplemented from Mage_Sales_Model_Quote_Address_Total_Abstract.

Definition at line 166 of file Shipping.php.

00167     {
00168         $amount = $address->getShippingAmount();
00169         if ($amount!=0 || $address->getShippingDescription()) {
00170             $address->addTotal(array(
00171                 'code'=>$this->getCode(),
00172                 'title'=>Mage::helper('sales')->__('Shipping & Handling').' ('.$address->getShippingDescription().')',
00173                 'value'=>$address->getShippingAmount()
00174             ));
00175         }
00176         return $this;
00177     }


The documentation for this class was generated from the following file:

Generated on Sat Jul 4 17:24:49 2009 for Magento by  doxygen 1.5.8