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); }
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; }
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; }
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; }
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; } }