Exemple #1
0
 /**
  * Checks to see if there is a discount for the customer
  * @param TinyBrick_OrderEdit_Model_Order_Address $address
  * @return TinyBrick_OrderEdit_Model_Order_Address_Total_Discount 
  */
 public function collect(TinyBrick_OrderEdit_Model_Order_Address $address)
 {
     $order = $address->getOrder();
     $eventArgs = array('website_id' => Mage::app()->getStore($order->getStoreId())->getWebsiteId(), 'customer_group_id' => $order->getCustomerGroupId(), 'coupon_code' => $order->getCouponCode());
     $address->setFreeShipping(0);
     $totalDiscountAmount = 0;
     $subtotalWithDiscount = 0;
     $baseTotalDiscountAmount = 0;
     $baseSubtotalWithDiscount = 0;
     $items = $order->getOrderItems();
     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;
             }
             $eventArgs['item'] = $item;
             //Mage::dispatchEvent('quickorderedit_order_address_discount_item', $eventArgs);
             if ($item->getDiscountAmount() || $item->getFreeShipping()) {
                 $hasDiscount = true;
             }
             $totalDiscountAmount += $item->getDiscountAmount();
             $baseTotalDiscountAmount += $item->getDiscountAmount();
             $item->setRowTotalWithDiscount($item->getRowTotal() - $item->getDiscountAmount());
             $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal() - $item->getDiscountAmount());
             $subtotalWithDiscount += $item->getRowTotalWithDiscount();
             $baseSubtotalWithDiscount += $item->getBaseRowTotalWithDiscount();
         }
     }
     $order->setDiscountAmount(-$totalDiscountAmount);
     $order->setSubtotalWithDiscount($subtotalWithDiscount);
     $order->setBaseDiscountAmount(-$baseTotalDiscountAmount);
     $order->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount);
     $order->setGrandTotal($order->getGrandTotal() + $order->getDiscountAmount());
     $order->setBaseGrandTotal($order->getBaseGrandTotal() + $order->getBaseDiscountAmount());
     return $this;
 }