Beispiel #1
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 int[] $appliedRuleIds
  * @return $this
  */
 public function setAppliedRuleIds(\Magento\Quote\Model\Quote\Item\AbstractItem $item, array $appliedRuleIds)
 {
     $address = $item->getAddress();
     $quote = $item->getQuote();
     $item->setAppliedRuleIds(join(',', $appliedRuleIds));
     $address->setAppliedRuleIds($this->validatorUtility->mergeIds($address->getAppliedRuleIds(), $appliedRuleIds));
     $quote->setAppliedRuleIds($this->validatorUtility->mergeIds($quote->getAppliedRuleIds(), $appliedRuleIds));
     return $this;
 }
 public function testReset()
 {
     $this->utility->expects($this->once())->method('resetRoundingDeltas');
     $quoteMock = $this->getMockBuilder('Magento\\Sales\\Model\\Quote')->disableOriginalConstructor()->getMock();
     $addressMock = $this->getMockBuilder('Magento\\Sales\\Model\\Quote\\Address')->disableOriginalConstructor()->getMock();
     $addressMock->expects($this->once())->method('getQuote')->willReturn($quoteMock);
     $this->model->init($this->model->getWebsiteId(), $this->model->getCustomerGroupId(), $this->model->getCouponCode());
     $this->assertInstanceOf('\\Magento\\SalesRule\\Model\\Validator', $this->model->reset($addressMock));
 }
 protected function applyRule($item, $rule)
 {
     $qty = 2;
     $discountCalc = $this->getMock('Magento\\SalesRule\\Model\\Rule\\Action\\Discount', ['fixQuantity', 'calculate'], [], '', false);
     $discountData = $this->getMock('Magento\\SalesRule\\Model\\Rule\\Action\\Discount\\Data', [], ['amount' => 30, 'baseAmount' => 30, 'originalAmount' => 30, 'baseOriginalAmount' => 30], '', false);
     $this->validatorUtility->expects($this->any())->method('getItemQty')->with($this->anything(), $this->anything())->will($this->returnValue($qty));
     $discountCalc->expects($this->any())->method('fixQuantity')->with($this->equalTo($qty), $this->equalTo($rule))->will($this->returnValue($qty));
     $discountCalc->expects($this->any())->method('calculate')->with($this->equalTo($rule), $this->equalTo($item), $this->equalTo($qty))->will($this->returnValue($discountData));
     $this->calculatorFactory->expects($this->any())->method('create')->with($this->anything())->will($this->returnValue($discountCalc));
 }
Beispiel #5
0
 public function testResetRoundingDeltas()
 {
     $this->assertNull($this->utility->resetRoundingDeltas());
 }