示例#1
0
 /**
  * set freeshipping for spent point order
  * 
  * @param Mage_Sales_Model_Quote_Address $address
  * @return Magestore_RewardPoints_Model_Total_Quote_Freeshipping
  */
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     /** @var $helper Magestore_RewardPoints_Helper_Calculation_Spending */
     $helper = Mage::helper('rewardpoints/calculation_spending');
     if (!$helper->getTotalPointSpent()) {
         return $this;
     }
     $isFreeShipping = Mage::getStoreConfig(Magestore_RewardPoints_Helper_Calculation_Spending::XML_PATH_FREE_SHIPPING, $address->getQuote()->getStoreId());
     if (!$isFreeShipping) {
         return $this;
     }
     $address->setFreeShipping(true);
     Mage::dispatchEvent('rewardpoints_collect_total_freeshipping', array('address' => $address));
     return $this;
 }
示例#2
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $quote = $address->getQuote();
     $eventArgs = array('website_id' => Mage::app()->getStore($quote->getStoreId())->getWebsiteId(), 'customer_group_id' => $quote->getCustomerGroupId(), 'coupon_code' => $quote->getCouponCode());
     $address->setFreeShipping(0);
     $totalDiscountAmount = 0;
     $subtotalWithDiscount = 0;
     $baseTotalDiscountAmount = 0;
     $baseSubtotalWithDiscount = 0;
     $hasDiscount = false;
     foreach ($address->getAllItems() as $item) {
         if ($item->getNoDiscount()) {
             $item->setDiscountAmount(0);
             $item->setBaseDiscountAmount(0);
             $item->setRowTotalWithDiscount($item->getRowTotal());
             $item->setBaseRowTotalWithDiscount($item->getRowTotal());
             $subtotalWithDiscount += $item->getRowTotal();
             $baseSubtotalWithDiscount += $item->getBaseRowTotal();
         } else {
             $eventArgs['item'] = $item;
             Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);
             if ($item->getDiscountAmount()) {
                 $hasDiscount = true;
             }
             $totalDiscountAmount += $item->getDiscountAmount();
             $baseTotalDiscountAmount += $item->getBaseDiscountAmount();
             $item->setRowTotalWithDiscount($item->getRowTotal() - $item->getDiscountAmount());
             $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal() - $item->getBaseDiscountAmount());
             $subtotalWithDiscount += $item->getRowTotalWithDiscount();
             $baseSubtotalWithDiscount += $item->getBaseRowTotalWithDiscount();
         }
     }
     $address->setDiscountAmount($totalDiscountAmount);
     $address->setSubtotalWithDiscount($subtotalWithDiscount);
     $address->setBaseDiscountAmount($baseTotalDiscountAmount);
     $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount);
     if (!$hasDiscount) {
         $quote->setCouponCode(null);
     }
     $address->setGrandTotal($address->getGrandTotal() - $address->getDiscountAmount());
     $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseDiscountAmount());
     return $this;
 }
示例#3
0
 protected function resetAddress(Mage_Sales_Model_Quote_Address $address)
 {
     $address->setDiscountAmount(0.0);
     $address->setBaseDiscountAmount(0.0);
     $address->setSubtotalWithDiscount($address->getSubtotal());
     $address->setBaseSubtotalWithDiscount($address->getBaseSubtotal());
     $address->setDiscountDescription('');
     $address->setDiscountDescriptionArray([]);
     if (!$address->getData('__applied_rules_reset__')) {
         $address->setAppliedRuleIds('');
         $address->setData('__applied_rules_reset__', true);
     }
     $address->setShippingDiscountAmount(0);
     $address->setBaseShippingDiscountAmount(0);
     $address->setFreeShipping(false);
 }
示例#4
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $quote = $address->getQuote();
     $eventArgs = array('website_id' => Mage::app()->getStore($quote->getStoreId())->getWebsiteId(), 'customer_group_id' => $quote->getCustomerGroupId(), 'coupon_code' => $quote->getCouponCode());
     $address->setFreeShipping(0);
     $totalDiscountAmount = 0;
     $subtotalWithDiscount = 0;
     $baseTotalDiscountAmount = 0;
     $baseSubtotalWithDiscount = 0;
     $items = $address->getAllItems();
     if (!count($items)) {
         $address->setDiscountAmount($totalDiscountAmount);
         $address->setSubtotalWithDiscount($subtotalWithDiscount);
         $address->setBaseDiscountAmount($baseTotalDiscountAmount);
         $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount);
         return $this;
     }
     $hasDiscount = false;
     foreach ($items as $item) {
         if ($item->getNoDiscount()) {
             $item->setDiscountAmount(0);
             $item->setBaseDiscountAmount(0);
             $item->setRowTotalWithDiscount($item->getRowTotal());
             $item->setBaseRowTotalWithDiscount($item->getRowTotal());
             $subtotalWithDiscount += $item->getRowTotal();
             $baseSubtotalWithDiscount += $item->getBaseRowTotal();
         } else {
             /**
              * Child item discount we calculate for parent
              */
             if ($item->getParentItemId()) {
                 continue;
             }
             /**
              * Composite item discount calculation
              */
             if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                 foreach ($item->getChildren() as $child) {
                     $eventArgs['item'] = $child;
                     Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);
                     if ($child->getDiscountAmount() || $child->getFreeShipping()) {
                         $hasDiscount = true;
                     }
                     /**
                      * Parent free shipping we apply to all children
                      */
                     if ($item->getFreeShipping()) {
                         $child->setFreeShipping($item->getFreeShipping());
                     }
                     /**
                      * @todo Parent discount we apply for all children without discount
                      */
                     if (!$child->getDiscountAmount() && $item->getDiscountPercent()) {
                     }
                     $totalDiscountAmount += $child->getDiscountAmount();
                     //*$item->getQty();
                     $baseTotalDiscountAmount += $child->getBaseDiscountAmount();
                     //*$item->getQty();
                     $child->setRowTotalWithDiscount($child->getRowTotal() - $child->getDiscountAmount());
                     $child->setBaseRowTotalWithDiscount($child->getBaseRowTotal() - $child->getBaseDiscountAmount());
                     $subtotalWithDiscount += $child->getRowTotalWithDiscount();
                     $baseSubtotalWithDiscount += $child->getBaseRowTotalWithDiscount();
                 }
             } else {
                 $eventArgs['item'] = $item;
                 Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);
                 if ($item->getDiscountAmount() || $item->getFreeShipping()) {
                     $hasDiscount = true;
                 }
                 $totalDiscountAmount += $item->getDiscountAmount();
                 $baseTotalDiscountAmount += $item->getBaseDiscountAmount();
                 $item->setRowTotalWithDiscount($item->getRowTotal() - $item->getDiscountAmount());
                 $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal() - $item->getBaseDiscountAmount());
                 $subtotalWithDiscount += $item->getRowTotalWithDiscount();
                 $baseSubtotalWithDiscount += $item->getBaseRowTotalWithDiscount();
             }
         }
     }
     $address->setDiscountAmount($totalDiscountAmount);
     $address->setSubtotalWithDiscount($subtotalWithDiscount);
     $address->setBaseDiscountAmount($baseTotalDiscountAmount);
     $address->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount);
     $address->setGrandTotal($address->getGrandTotal() - $address->getDiscountAmount());
     $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseDiscountAmount());
     return $this;
 }
示例#5
0
 /**
  * Recalulates the shipping discount taking into account whether or not
  * a redemption rule is applied by the user.
  * TODO does this need to be here?
  * @deprecated does this need to be here?
  *
  * @author Jay El <*****@*****.**>
  * 
  * @param Mage_Sales_Model_Quote_Address &$address
  * @param Mage_Sales_Model_Quote_Item_Abstract &$item
  * @param array $applied_redemptions
  */
 protected function recalculateShippingDiscounts(Mage_Sales_Model_Quote_Address &$address, &$item, array $applied_redemptions)
 {
     //@nelkaake 04/03/2010 4:56:24 PM : as long as we're not in Mage 1.4
     if (Mage::helper('rewards')->isBaseMageVersionAtLeast('1.4')) {
     } else {
         // Enabled/disable free shipping
         $rules = $this->_getRules2();
         foreach ($rules as &$salesrule) {
             $rule_id = $salesrule->getId();
             // Get the points salesrule versus $salesrule which is any type of salesrule
             $pointsrule = $this->getRule($rule_id);
             if (!$pointsrule->isPointsRule()) {
                 continue;
             }
             // we're only looking at points rules here
             // if it's a rdemption rule and it's not applied, continue on...
             if ($pointsrule->isRedemptionRule() && array_search($rule_id, $applied_redemptions) === false) {
                 continue;
             }
             switch ($pointsrule->getSimpleFreeShipping()) {
                 case Mage_SalesRule_Model_Rule::FREE_SHIPPING_ITEM:
                     $item->setFreeShipping($pointsrule->getDiscountQty() ? $pointsrule->getDiscountQty() : true);
                     break;
                 case Mage_SalesRule_Model_Rule::FREE_SHIPPING_ADDRESS:
                     $address->setFreeShipping(true);
                     break;
             }
         }
     }
     //Mage::log("Free Shipping Report: item={$item->getFreeShipping()}, address={$address->getFreeShipping()}" );
 }