34 private $childrenValidationLocator;
39 private $calculatorFactory;
53 $this->calculatorFactory = $calculatorFactory;
54 $this->validatorUtility = $utility;
55 $this->_eventManager = $eventManager;
56 $this->childrenValidationLocator = $childrenValidationLocator
76 if (!$this->validatorUtility->canProcessRule(
$rule,
$address)) {
80 if (!$skipValidation && !
$rule->getActions()->validate(
$item)) {
81 if (!$this->childrenValidationLocator->isChildrenValidationRequired(
$item)) {
84 $childItems =
$item->getChildren();
86 if (!empty($childItems)) {
87 foreach ($childItems as $childItem) {
88 if (
$rule->getActions()->validate($childItem)) {
99 $appliedRuleIds[
$rule->getRuleId()] =
$rule->getRuleId();
101 if (
$rule->getStopRulesProcessing()) {
106 return $appliedRuleIds;
119 $ruleLabel =
$rule->getStoreLabel(
$address->getQuote()->getStore());
124 if (strlen(
$address->getCouponCode())) {
163 $qty = $this->validatorUtility->getItemQty(
$item,
$rule);
165 $discountCalculator = $this->calculatorFactory->create(
$rule->getSimpleAction());
166 $qty = $discountCalculator->fixQuantity($qty,
$rule);
167 $discountData = $discountCalculator->calculate(
$rule,
$item, $qty);
170 $this->validatorUtility->deltaRoundingFix($discountData,
$item);
177 $this->validatorUtility->minFix($discountData,
$item, $qty);
179 return $discountData;
189 $item->setDiscountAmount($discountData->getAmount());
190 $item->setBaseDiscountAmount($discountData->getBaseAmount());
191 $item->setOriginalDiscountAmount($discountData->getOriginalAmount());
192 $item->setBaseOriginalDiscountAmount($discountData->getBaseOriginalAmount());
236 $this->_eventManager->dispatch(
237 'salesrule_validator_process',
244 'result' => $discountData
261 $item->setAppliedRuleIds(join(
',', $appliedRuleIds));
262 $address->setAppliedRuleIds($this->validatorUtility->mergeIds(
$address->getAppliedRuleIds(), $appliedRuleIds));
263 $quote->setAppliedRuleIds($this->validatorUtility->mergeIds(
$quote->getAppliedRuleIds(), $appliedRuleIds));
getDiscountData($item, $rule)
const COUPON_TYPE_NO_COUPON
setAppliedRuleIds(\Magento\Quote\Model\Quote\Item\AbstractItem $item, array $appliedRuleIds)
addDiscountDescription($address, $rule)
eventFix(\Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData, \Magento\Quote\Model\Quote\Item\AbstractItem $item, \Magento\SalesRule\Model\Rule $rule, $qty)
maintainAddressCouponCode($address, $rule, $couponCode)
__construct(\Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory $calculatorFactory, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\SalesRule\Model\Utility $utility, ChildrenValidationLocator $childrenValidationLocator=null)
applyRules($item, $rules, $skipValidation, $couponCode)
setDiscountData($discountData, $item)
applyRule($item, $rule, $address, $couponCode)