Exemple #1
0
 public function testProcessFreeShipping()
 {
     $item = $this->getMock('Mage_Sales_Model_Quote_Item', array('getAddress'), array(), '', false);
     $item->expects($this->once())->method('getAddress')->will($this->returnValue(true));
     $this->assertInstanceOf('Mage_SalesRule_Model_Validator', $this->_model->processFreeShipping($item));
     return true;
 }
 /**
  * Collect information about free shipping for all address items
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @return  Mage_SalesRule_Model_Quote_Freeshipping
  */
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     parent::collect($address);
     $quote = $address->getQuote();
     $store = Mage::app()->getStore($quote->getStoreId());
     $address->setFreeShipping(0);
     $items = $this->_getAddressItems($address);
     if (!count($items)) {
         return $this;
     }
     $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode());
     $isAllFree = true;
     foreach ($items as $item) {
         if ($item->getNoDiscount()) {
             $isAllFree = false;
             $item->setFreeShipping(false);
         } else {
             /**
              * Child item discount we calculate for parent
              */
             if ($item->getParentItemId()) {
                 continue;
             }
             $this->_calculator->processFreeShipping($item);
             $isItemFree = (bool) $item->getFreeShipping();
             $isAllFree = $isAllFree && $isItemFree;
             if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                 foreach ($item->getChildren() as $child) {
                     $this->_calculator->processFreeShipping($child);
                     /**
                      * Parent free shipping we apply to all children
                      */
                     if ($isItemFree) {
                         $child->setFreeShipping($isItemFree);
                     }
                 }
             }
         }
     }
     if ($isAllFree && !$address->getFreeShipping()) {
         $address->setFreeShipping(true);
     }
     return $this;
 }