コード例 #1
0
 /**
  * Apply rules to current order item
  *
  * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
  * @param \Magento\SalesRule\Model\Resource\Rule\Collection $rules
  * @param bool $skipValidation
  * @param mixed $couponCode
  * @return array
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function applyRules($item, $rules, $skipValidation, $couponCode)
 {
     $address = $item->getAddress();
     $appliedRuleIds = [];
     /* @var $rule \Magento\SalesRule\Model\Rule */
     foreach ($rules as $rule) {
         if (!$this->validatorUtility->canProcessRule($rule, $address)) {
             continue;
         }
         if (!$skipValidation && !$rule->getActions()->validate($item)) {
             $childItems = $item->getChildren();
             $isContinue = true;
             if (!empty($childItems)) {
                 foreach ($childItems as $childItem) {
                     if ($rule->getActions()->validate($childItem)) {
                         $isContinue = false;
                     }
                 }
             }
             if ($isContinue) {
                 continue;
             }
         }
         $this->applyRule($item, $rule, $address, $couponCode);
         $appliedRuleIds[$rule->getRuleId()] = $rule->getRuleId();
         if ($rule->getStopRulesProcessing()) {
             break;
         }
     }
     return $appliedRuleIds;
 }
コード例 #2
0
ファイル: Validator.php プロジェクト: pavelnovitsky/magento2
 /**
  * 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;
 }
コード例 #3
0
ファイル: RulesApplier.php プロジェクト: aiesh/magento2
 /**
  * Apply rules to current order item
  *
  * @param \Magento\Sales\Model\Quote\Item\AbstractItem $item
  * @param \Magento\SalesRule\Model\Resource\Rule\Collection $rules
  * @param bool $skipValidation
  * @param mixed $couponCode
  * @return array
  */
 public function applyRules($item, $rules, $skipValidation, $couponCode)
 {
     $address = $item->getAddress();
     $appliedRuleIds = array();
     /* @var $rule \Magento\SalesRule\Model\Rule */
     foreach ($rules as $rule) {
         if (!$this->validatorUtility->canProcessRule($rule, $address)) {
             continue;
         }
         if (!$skipValidation && !$rule->getActions()->validate($item)) {
             continue;
         }
         $this->applyRule($item, $rule, $address, $couponCode);
         $appliedRuleIds[$rule->getRuleId()] = $rule->getRuleId();
         if ($rule->getStopRulesProcessing()) {
             break;
         }
     }
     return $appliedRuleIds;
 }
コード例 #4
0
ファイル: UtilityTest.php プロジェクト: Doability/magento2dev
 /**
  * Quote does not meet rule's conditions
  */
 public function testCanProcessRule()
 {
     $this->rule->setCouponType(\Magento\SalesRule\Model\Rule::COUPON_TYPE_NO_COUPON);
     $this->rule->expects($this->once())->method('validate')->will($this->returnValue(true));
     $this->assertTrue($this->utility->canProcessRule($this->rule, $this->address));
 }