public function testCanApplyRules() { $item = $this->getQuoteItemMock(); $quote = $item->getQuote(); $quote->setItemsQty(2); $quote->setVirtualItemsQty(1); $this->assertTrue($this->model->canApplyRules($item)); $quote->setItemsQty(2); $quote->setVirtualItemsQty(2); $this->assertTrue($this->model->canApplyRules($item)); }
/** * Collect address discount amount * * @param Address $address * @return $this */ public function collect(Address $address) { parent::collect($address); $quote = $address->getQuote(); $store = $this->_storeManager->getStore($quote->getStoreId()); $this->_calculator->reset($address); $items = $this->_getAddressItems($address); if (!count($items)) { return $this; } $eventArgs = array('website_id' => $store->getWebsiteId(), 'customer_group_id' => $quote->getCustomerGroupId(), 'coupon_code' => $quote->getCouponCode()); $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode()); $this->_calculator->initTotals($items, $address); $address->setDiscountDescription(array()); $items = $this->_calculator->sortItemsByPriority($items); foreach ($items as $item) { if ($item->getNoDiscount()) { $item->setDiscountAmount(0); $item->setBaseDiscountAmount(0); continue; } /** * Child item discount we calculate for parent */ if ($item->getParentItemId()) { continue; } $eventArgs['item'] = $item; $this->_eventManager->dispatch('sales_quote_address_discount_item', $eventArgs); if ($item->getHasChildren() && $item->isChildrenCalculated()) { $isMatchedParent = $this->_calculator->canApplyRules($item); $this->_calculator->setSkipActionsValidation($isMatchedParent); foreach ($item->getChildren() as $child) { $this->_calculator->process($child); if ($isMatchedParent) { $this->_recalculateChildDiscount($child); } $eventArgs['item'] = $child; $this->_eventManager->dispatch('sales_quote_address_discount_item', $eventArgs); $this->_aggregateItemDiscount($child); } $this->_calculator->setSkipActionsValidation(false); } else { $this->_calculator->process($item); $this->_aggregateItemDiscount($item); } } /** * Process shipping amount discount */ $address->setShippingDiscountAmount(0); $address->setBaseShippingDiscountAmount(0); if ($address->getShippingAmount()) { $this->_calculator->processShippingAmount($address); $this->_addAmount(-$address->getShippingDiscountAmount()); $this->_addBaseAmount(-$address->getBaseShippingDiscountAmount()); } $this->_calculator->prepareDescription($address); return $this; }
public function testCanApplyRules() { $this->model->init($this->model->getWebsiteId(), $this->model->getCustomerGroupId(), $this->model->getCouponCode()); $item = $this->getQuoteItemMock(); $rule = $this->getMock('Magento\\SalesRule\\Model\\Rule', [], [], '', false); $actionsCollection = $this->getMock('Magento\\Rule\\Model\\Action\\Collection', ['validate'], [], '', false); $actionsCollection->expects($this->any())->method('validate')->with($item)->willReturn(true); $rule->expects($this->any())->method('getActions')->willReturn($actionsCollection); $iterator = new \ArrayIterator([$rule]); $this->ruleCollection->expects($this->any())->method('getIterator')->willReturn($iterator); $this->utility->expects($this->any())->method('canProcessRule')->with($rule, $this->anything())->willReturn(true); $quote = $item->getQuote(); $quote->setItemsQty(2); $quote->setVirtualItemsQty(1); $this->assertTrue($this->model->canApplyRules($item)); $quote->setItemsQty(2); $quote->setVirtualItemsQty(2); $this->assertTrue($this->model->canApplyRules($item)); }