Пример #1
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);
 }
Пример #2
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $quote = $address->getQuote();
     $credit = Mage::helper('credit')->exchangeCreditToMoney(Mage::getSingleton('checkout/session')->getCredit());
     $subtotalWithDiscount = 0;
     $items = $address->getAllItems();
     if (!count($items)) {
         return $this;
     }
     $address->setCreditDiscount($credit);
     $address->setSubtotalWithDiscount($subtotalWithDiscount - $credit);
     $address->setBaseCreditDiscount($credit);
     $address->setBaseSubtotalWithDiscount($subtotalWithDiscount - $credit);
     $address->setGrandTotal($address->getGrandTotal() - $address->getCreditDiscount());
     $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseCreditDiscount());
     $address->setBaseDiscountAmount($address->getBaseDiscountAmount() - $address->getBaseCreditDiscount());
     return $this;
 }
Пример #3
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;
 }
Пример #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
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $session = Mage::getSingleton('admin/session');
     $store_id = Mage::app()->getStore()->getId();
     if (Mage::helper('affiliate/data')->getEnabledStore($store_id)) {
         $quote = $address->getQuote();
         $items = $address->getAllVisibleItems();
         //$items = $address->getAllNonNominalItems();
         if (!count($items)) {
             return $this;
         }
         // xu ly code
         // zend_debug::dump($items);die();
         $discountAmount = 0;
         $referral_code = Mage::helper('affiliate')->getReferralCodeByCheckout();
         $customer_id = (int) Mage::getSingleton("customer/session")->getCustomer()->getId();
         $program_priority = Mage::helper('affiliate/data')->getAffiliatePositionStore($store_id);
         $position_discount = Mage::helper('affiliate/data')->getAffiliateDiscountStore($store_id);
         $programs = array();
         $programs = $this->getAllProgram();
         if (!Mage::app()->isSingleStoreMode()) {
             $programs = $this->getProgramByStoreView($programs);
         }
         $programs = $this->getProgramByEnable($programs);
         $_programs = $this->getProgramByTime($programs);
         foreach ($items as $item) {
             $product_id = $item->getProductId();
             $qty = $item->getQty();
             //$price = $item->getPrice();
             //$item->setBaseDiscountAmount($item->getBaseDiscountAmount() - $item->getAffiliateDiscount());
             if ($position_discount == 1) {
                 $price = $item->getBasePrice();
             } else {
                 $price = $item->getBasePrice() - $item->getBaseDiscountAmount() / $qty;
             }
             //$price = $item->getPrice();
             $programs = $this->processRule($item, $_programs);
             //var_dump($programs);exit;
             // neu mang program > 0
             $programs = $this->getProgramByCustomer($programs, $referral_code);
             //var_dump($programs);exit;
             if (sizeof($programs) >= 2) {
                 $array_customer_inviteds = array_splice($programs, sizeof($programs) - 1, 1);
                 foreach ($array_customer_inviteds as $array_customer_invited) {
                     $customer_invited = $array_customer_invited;
                     break;
                 }
                 // lay program theo 3 tieu chi
                 if ($program_priority == 1) {
                     $program_id = $this->getProgramByCommission($programs, $qty, $price, $customer_invited);
                 } else {
                     if ($program_priority == 2) {
                         $program_id = $this->getProgramByDiscount($programs, $qty, $price, $customer_invited);
                     } else {
                         if ($program_priority == 3) {
                             $program_id = $this->getProgramByPosition($programs);
                         }
                     }
                 }
                 $discount = $this->getDiscountByProgram($program_id, $qty, $price, $customer_invited);
             } else {
                 $discount = 0;
             }
             $discount = round($discount, 2);
             $discountAmount = $discountAmount + $discount;
             $item->setDiscountAmount($item->getDiscountAmount() + Mage::helper('core')->currency($discount, false, false));
             $item->setBaseDiscountAmount($item->getBaseDiscountAmount() + $discount);
             $item->setMwAffiliateDiscount($discount);
             // tim ra mang chuong trinh cho moi san pham $programs
             // kiem tra xem san pham do dung chuong trinh khuyen mai nao
             //var_dump($program_id);die();
         }
         //$discountAmount = 100;
         //phan xu ly cuoi cung
         $discountAmount_show = Mage::helper('core')->currency($discountAmount, false, false);
         //$address->setDiscountAmount($address->getDiscountAmount() - $discountAmount_show);// gia de hien thi
         $address->setBaseDiscountAmount($address->getBaseDiscountAmount() - $discountAmount);
         // gia de tinh toan
         $address->setAffiliateDiscount($discountAmount_show);
         // gia de hien thi
         $address->setBaseAffiliateDiscount($discountAmount);
         $address->setGrandTotal($address->getGrandTotal() - $address->getAffiliateDiscount());
         $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseAffiliateDiscount());
         return $this;
     }
 }