/**
  * Add order items to the ship group for each item shipping to the address.
  *
  * @return self
  */
 protected function _injectItemData()
 {
     $orderItemIterable = $this->_shipGroup->getItems();
     // The first item needs to include shipping totals, use this flag to
     // track when item is the first item.
     $first = true;
     foreach ($this->_address->getAllVisibleItems() as $item) {
         // Add shipping amounts to the first item - necessary way of sending
         // address level shipping totals which is the only way Magento can
         // report shipping totals.
         if ($first) {
             $item->setIncludeShippingTotals(true);
         }
         $itemBuilder = $this->_taxFactory->createRequestBuilderItem($orderItemIterable, $this->_address, $item);
         $itemPayload = $itemBuilder->getOrderItemPayload();
         if ($itemPayload) {
             $orderItemIterable[$itemPayload] = null;
         }
         // After the first iteration, this should always be false.
         $first = false;
     }
     return $this;
 }
예제 #2
0
 public function fetch(Mage_Sales_Model_Quote_Address $address)
 {
     $checkoutSubtotal = Mage::getSingleton('checkout/session')->getQuote();
     $items = $address->getAllVisibleItems();
     if (!count($items)) {
         return $this;
     }
     if (!$check_tax) {
         $tax = $address->getBaseTaxAmount();
     }
     if (!$check_shipping) {
         $shipping = $address->getBaseShippingInclTax();
     }
     $baseGrandTotal = $address->getBaseGrandTotal();
     $store_id = Mage::app()->getStore()->getId();
     $quote = $address->getQuote();
     /*added by pavan 28/01/14*/
     $quote->setMwStorecreditCheckoutMax($baseGrandTotal);
     $quote->save();
     //Mage::log('currenturl'.$currentUrl, null, 'mytotal.log');
     //	   Mage::log('pavan is here', null, 'mylogfile.log');
     //	   Mage::log($checkoutSubtotal->getData(), null, 'mylogfile.log');
     //Mage::log('getMwStorecredit'.$address->getMwStorecredit(), null, 'mylogfile.log');
     if ($checkoutSubtotal->getData('subtotal') == $checkoutSubtotal->getData('subtotal_with_discount')) {
         $subTotalWithTax = $checkoutSubtotal->getData('subtotal') + $tax;
     } else {
         $couponAmount = $checkoutSubtotal->getData('subtotal_with_discount') - $checkoutSubtotal->getData('subtotal');
         $subTotalWithTax = $checkoutSubtotal->getData('subtotal_with_discount') + $tax;
     }
     // if($subTotalWithTax >= '500') {
     // $shipp = '0';
     // } else {
     // $shipp = '60';
     // }
     // if($address->getMwStorecredit() > ($subTotalWithTax + $shipp) || $address->getMwRewardpointDiscount() > ($subTotalWithTax + $shipp)) {
     // Mage::log('herere'.$address->getMwStorecredit().$subTotalWithTax, null, 'here123.log');
     // $address->setMwStorecredit(0)
     // ->setMwRewardpoint(0)
     // ->save();
     // $quote->setMwStorecredit(0)
     // ->setMwRewardpoint(0)
     // ->save();
     // }
     /*START -- values set to zero if cart quantity changes*/
     if (Mage::app()->getFrontController()->getRequest()->getActionName() == 'couponapply') {
         $quote = $address->getQuote();
         $quote->setMwStorecredit(0)->setMwStorecreditDiscount(0)->setMwStorecreditDiscountShow(0)->save();
         $quote->setMwRewardpoint(0)->setMwRewardpointDiscountShow(0)->setMwRewardpointDiscount(0)->save();
         $address->setMwStorecredit(0)->setMwStorecreditDiscount(0)->setMwStorecreditDiscountShow(0)->save();
         $address->setMwRewardpoint(0)->setMwRewardpointDiscountShow(0)->setMwRewardpointDiscount(0)->save();
     }
     if (Mage::app()->getFrontController()->getRequest()->getActionName() == 'cartqty' || Mage::app()->getFrontController()->getRequest()->getActionName() == 'delete') {
         $quote = $address->getQuote();
         $quote->setCouponCode('')->setMwStorecredit(0)->setMwStorecreditDiscount(0)->setMwStorecreditDiscountShow(0)->save();
         $quote->setCouponCode('')->setMwRewardpoint(0)->setMwRewardpointDiscountShow(0)->setMwRewardpointDiscount(0)->save();
         $address->setCouponCode('')->setMwStorecredit(0)->setMwStorecreditDiscount(0)->setMwStorecreditDiscountShow(0)->save();
     }
     /*END -- values set to zero if cart quantity changes*/
     $amount = $address->getMwStorecreditDiscountShow();
     $credit = $address->getMwStorecredit();
     if ($credit != 0) {
         $title = Mage::helper('storecreditpro')->__('Zoff Bank');
         $address->addTotal(array('code' => $this->getCode(), 'title' => $title, 'value' => -$credit, 'strong' => false));
     }
     return $this;
 }
 /**
  * Get the items the need to be discounted based on the category ids or root category and escape bundle products from calculation
  *
  * @author Mohamed Meabed <*****@*****.**>
  *
  * @param Mage_SalesRule_Model_Rule           $rule
  * @param Mage_Sales_Model_Quote_Address      $address
  * @param Mage_Sales_Model_Quote_Address_Item $_addressItem
  *
  * @return array
  */
 public function getItemsToDiscount($rule, $address, $_addressItem)
 {
     $conditions = $rule->getConditions()->getConditions();
     $allowedCatIds = null;
     $parsedCats = array();
     $condition = null;
     $_productCategories = array();
     $cartCategories = array();
     $catToProcess = array();
     $isRootCategory = false;
     $validCondition = false;
     $rootCategoryId = Mage::app()->getStore()->getRootCategoryId();
     $ignoreType = array('bundle');
     /** @var Mage_SalesRule_Model_Rule_Condition_Address $c */
     foreach ($conditions as $c) {
         if (!$allowedCatIds && !$condition && $c->getData('attribute')) {
             $condition = $c;
             $val = $c->getValueParsed();
             if (is_string($val)) {
                 $parsedCats = explode(',', $val);
             }
             if (is_array($val)) {
                 $parsedCats = $val;
             }
             if ($parsedCats && is_array($parsedCats)) {
                 if (in_array($rootCategoryId, $parsedCats)) {
                     $isRootCategory = true;
                     $_productCategories = array($rootCategoryId);
                 }
             }
         }
     }
     $items = $address->getAllVisibleItems();
     $discountStep = $rule->getDiscountStep();
     $i = 0;
     /** @var Mage_Sales_Model_Quote_Item $item */
     foreach ($items as $item) {
         // Escape bundles
         if (in_array($ignoreType, $item->getProductType())) {
             continue;
         }
         if (!$isRootCategory) {
             /** @var Mage_Catalog_Model_Product $_product */
             $_product = Mage::getModel('catalog/product')->load($item->getProductId());
             $_productCategories = $_product->getCategoryIds();
         }
         $validCondition = $condition->validateAttribute($_productCategories);
         $cat = array_shift($_productCategories);
         if ($isRootCategory || $validCondition) {
             for ($x = 0; $x < $item->getQty(); $x++) {
                 $cartCategories[$cat][$i]['itemId'] = $item->getId();
                 $cartCategories[$cat][$i]['qty'] = $item->getQty();
                 $cartCategories[$cat][$i]['price'] = $item->getPrice();
                 $cartCategories[$cat][$i]['item'] = $item;
                 $i++;
                 if (count($cartCategories[$cat]) >= $discountStep) {
                     $catToProcess[$cat] = $cat;
                 }
             }
         }
     }
     $x = $rule->getDiscountStep();
     $y = $rule->getDiscountAmount();
     $return = array();
     foreach ($catToProcess as $cat) {
         $catItems = $cartCategories[$cat];
         $this->aaSort($catItems, 'price');
         $qtyTobeDiscounted = (int) ($i / $discountStep);
         $qtyTobeDiscounted *= $y;
         for ($j = 0; $j < $qtyTobeDiscounted; $j++) {
             $itemDisc = array_pop($catItems);
             /** @var Mage_Sales_Model_Quote_Address_Item $salesItem */
             $salesItem = $itemDisc['item'];
             if ($salesItem && !isset($return[$salesItem->getId()])) {
                 $return[$salesItem->getId()] = 0;
             }
             $return[$salesItem->getId()]++;
         }
     }
     return $return;
 }
예제 #4
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;
     }
 }