public function testGetItemQty()
 {
     $qty = 7;
     $this->item->expects($this->once())->method('getTotalQty')->will($this->returnValue($qty));
     $this->rule->expects($this->once())->method('getDiscountQty')->will($this->returnValue(null));
     $this->assertEquals($qty, $this->utility->getItemQty($this->item, $this->rule));
 }
Exemple #2
0
 /**
  * Calculate quote totals for each rule and save results
  *
  * @param mixed $items
  * @param Address $address
  * @return $this
  */
 public function initTotals($items, Address $address)
 {
     $address->setCartFixedRules(array());
     if (!$items) {
         return $this;
     }
     /** @var \Magento\SalesRule\Model\Rule $rule */
     foreach ($this->_getRules() as $rule) {
         if (\Magento\SalesRule\Model\Rule::CART_FIXED_ACTION == $rule->getSimpleAction() && $this->validatorUtility->canProcessRule($rule, $address)) {
             $ruleTotalItemsPrice = 0;
             $ruleTotalBaseItemsPrice = 0;
             $validItemsCount = 0;
             foreach ($items as $item) {
                 //Skipping child items to avoid double calculations
                 if ($item->getParentItemId()) {
                     continue;
                 }
                 if (!$rule->getActions()->validate($item)) {
                     continue;
                 }
                 if (!$this->canApplyDiscount($item)) {
                     continue;
                 }
                 $qty = $this->validatorUtility->getItemQty($item, $rule);
                 $ruleTotalItemsPrice += $this->getItemPrice($item) * $qty;
                 $ruleTotalBaseItemsPrice += $this->getItemBasePrice($item) * $qty;
                 $validItemsCount++;
             }
             $this->_rulesItemTotals[$rule->getId()] = array('items_price' => $ruleTotalItemsPrice, 'base_items_price' => $ruleTotalBaseItemsPrice, 'items_count' => $validItemsCount);
         }
     }
     return $this;
 }
 /**
  * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
  * @param \Magento\SalesRule\Model\Rule $rule
  * @return \Magento\SalesRule\Model\Rule\Action\Discount\Data
  */
 protected function getDiscountData($item, $rule)
 {
     $qty = $this->validatorUtility->getItemQty($item, $rule);
     $discountCalculator = $this->calculatorFactory->create($rule->getSimpleAction());
     $qty = $discountCalculator->fixQuantity($qty, $rule);
     $discountData = $discountCalculator->calculate($rule, $item, $qty);
     $this->eventFix($discountData, $item, $rule, $qty);
     $this->validatorUtility->deltaRoundingFix($discountData, $item);
     /**
      * We can't use row total here because row total not include tax
      * Discount can be applied on price included tax
      */
     $this->validatorUtility->minFix($discountData, $item, $qty);
     return $discountData;
 }