Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Protected Member Functions | Protected Attributes
Validator Class Reference
Inheritance diagram for Validator:
AbstractModel DataObject Calculator

Public Member Functions

 __construct (\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory, \Magento\Catalog\Helper\Data $catalogData, \Magento\SalesRule\Model\Utility $utility, \Magento\SalesRule\Model\RulesApplier $rulesApplier, \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency, \Magento\SalesRule\Model\Validator\Pool $validators, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])
 
 init ($websiteId, $customerGroupId, $couponCode)
 
 setSkipActionsValidation ($flag)
 
 canApplyRules (AbstractItem $item)
 
 reset (Address $address)
 
 process (AbstractItem $item)
 
 processShippingAmount (Address $address)
 
 getItemPrice ($item)
 
 getItemOriginalPrice ($item)
 
 getItemBasePrice ($item)
 
 getItemBaseOriginalPrice ($item)
 
 prepareDescription ($address, $separator=', ')
 
 getRuleItemTotalsInfo ($key)
 
 decrementRuleItemTotalsCount ($key)
 
- Public Member Functions inherited from AbstractModel
 __construct (\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])
 
 __sleep ()
 
 __wakeup ()
 
 setIdFieldName ($name)
 
 getIdFieldName ()
 
 getId ()
 
 setId ($value)
 
 isDeleted ($isDeleted=null)
 
 hasDataChanges ()
 
 setData ($key, $value=null)
 
 unsetData ($key=null)
 
 setDataChanges ($value)
 
 getOrigData ($key=null)
 
 setOrigData ($key=null, $data=null)
 
 dataHasChangedFor ($field)
 
 getResourceName ()
 
 getResourceCollection ()
 
 getCollection ()
 
 load ($modelId, $field=null)
 
 beforeLoad ($identifier, $field=null)
 
 afterLoad ()
 
 isSaveAllowed ()
 
 setHasDataChanges ($flag)
 
 save ()
 
 afterCommitCallback ()
 
 isObjectNew ($flag=null)
 
 beforeSave ()
 
 validateBeforeSave ()
 
 getCacheTags ()
 
 cleanModelCache ()
 
 afterSave ()
 
 delete ()
 
 beforeDelete ()
 
 afterDelete ()
 
 afterDeleteCommit ()
 
 getResource ()
 
 getEntityId ()
 
 setEntityId ($entityId)
 
 clearInstance ()
 
 getStoredData ()
 
 getEventPrefix ()
 
- Public Member Functions inherited from DataObject
 __construct (array $data=[])
 
 addData (array $arr)
 
 setData ($key, $value=null)
 
 unsetData ($key=null)
 
 getData ($key='', $index=null)
 
 getDataByPath ($path)
 
 getDataByKey ($key)
 
 setDataUsingMethod ($key, $args=[])
 
 getDataUsingMethod ($key, $args=null)
 
 hasData ($key='')
 
 toArray (array $keys=[])
 
 convertToArray (array $keys=[])
 
 toXml (array $keys=[], $rootName='item', $addOpenTag=false, $addCdata=true)
 
 convertToXml (array $arrAttributes=[], $rootName='item', $addOpenTag=false, $addCdata=true)
 
 toJson (array $keys=[])
 
 convertToJson (array $keys=[])
 
 toString ($format='')
 
 __call ($method, $args)
 
 isEmpty ()
 
 serialize ($keys=[], $valueSeparator='=', $fieldSeparator=' ', $quote='"')
 
 debug ($data=null, &$objects=[])
 
 offsetSet ($offset, $value)
 
 offsetExists ($offset)
 
 offsetUnset ($offset)
 
 offsetGet ($offset)
 

Protected Member Functions

 _getRules (Address $address=null)
 
 getAddressId (Address $address)
 
- Protected Member Functions inherited from AbstractModel
 _construct ()
 
 _init ($resourceModel)
 
 _setResourceModel ($resourceName, $collectionName=null)
 
 _getResource ()
 
 _getEventData ()
 
 _beforeLoad ($modelId, $field=null)
 
 _afterLoad ()
 
 _hasModelChanged ()
 
 _getValidatorBeforeSave ()
 
 _createValidatorBeforeSave ()
 
 _getValidationRulesBeforeSave ()
 
 _clearReferences ()
 
 _clearData ()
 
- Protected Member Functions inherited from DataObject
 _getData ($key)
 
 _underscore ($name)
 

Protected Attributes

 $_rules
 
 $_isFirstTimeResetRun = true
 
 $_rulesItemTotals = []
 
 $_skipActionsValidation = false
 
 $_catalogData = null
 
 $_collectionFactory
 
 $validatorUtility
 
 $rulesApplier
 
 $priceCurrency
 
 $validators
 
 $messageManager
 
 $counter = 0
 
- Protected Attributes inherited from AbstractModel
 $_eventPrefix = 'core_abstract'
 
 $_eventObject = 'object'
 
 $_idFieldName = 'id'
 
 $_hasDataChanges = false
 
 $_origData
 
 $_isDeleted = false
 
 $_resource
 
 $_resourceCollection
 
 $_resourceName
 
 $_collectionName
 
 $_cacheTag = false
 
 $_dataSaveAllowed = true
 
 $_isObjectNew = null
 
 $_validatorBeforeSave = null
 
 $_eventManager
 
 $_cacheManager
 
 $_registry
 
 $_logger
 
 $_appState
 
 $_actionValidator
 
 $storedData = []
 
- Protected Attributes inherited from DataObject
 $_data = []
 

Additional Inherited Members

- Static Protected Attributes inherited from DataObject
static $_underscoreCache = []
 

Detailed Description

SalesRule Validator Model

Allows dispatching before and after events for each controller action

@method mixed getCouponCode() @method Validator setCouponCode($code) @method mixed getWebsiteId() @method Validator setWebsiteId($id) @method mixed getCustomerGroupId() @method Validator setCustomerGroupId($id) @SuppressWarnings(PHPMD.CouplingBetweenObjects)

Definition at line 25 of file Validator.php.

Constructor & Destructor Documentation

◆ __construct()

__construct ( \Magento\Framework\Model\Context  $context,
\Magento\Framework\Registry  $registry,
\Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory  $collectionFactory,
\Magento\Catalog\Helper\Data  $catalogData,
\Magento\SalesRule\Model\Utility  $utility,
\Magento\SalesRule\Model\RulesApplier  $rulesApplier,
\Magento\Framework\Pricing\PriceCurrencyInterface  $priceCurrency,
\Magento\SalesRule\Model\Validator\Pool  $validators,
\Magento\Framework\Message\ManagerInterface  $messageManager,
\Magento\Framework\Model\ResourceModel\AbstractResource  $resource = null,
\Magento\Framework\Data\Collection\AbstractDb  $resourceCollection = null,
array  $data = [] 
)
Parameters
\Magento\Framework\Model\Context$context
\Magento\Framework\Registry$registry
\Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory$collectionFactory
\Magento\Catalog\Helper\Data$catalogData
Utility$utility
RulesApplier$rulesApplier
\Magento\Framework\Pricing\PriceCurrencyInterface$priceCurrency
Validator\Pool$validators
\Magento\Framework\Message\ManagerInterface$messageManager
\Magento\Framework\Model\ResourceModel\AbstractResource$resource
\Magento\Framework\Data\Collection\AbstractDb$resourceCollection
array$data@SuppressWarnings(PHPMD.ExcessiveParameterList)

Definition at line 115 of file Validator.php.

128  {
129  $this->_collectionFactory = $collectionFactory;
130  $this->_catalogData = $catalogData;
131  $this->validatorUtility = $utility;
132  $this->rulesApplier = $rulesApplier;
133  $this->priceCurrency = $priceCurrency;
134  $this->validators = $validators;
135  $this->messageManager = $messageManager;
136  parent::__construct($context, $registry, $resource, $resourceCollection, $data);
137  }
$resource
Definition: bulk.php:12

Member Function Documentation

◆ _getRules()

_getRules ( Address  $address = null)
protected

Get rules collection for current object state

Parameters
Address | null$address
Returns
\Magento\SalesRule\Model\ResourceModel\Rule\Collection

Definition at line 162 of file Validator.php.

163  {
164  $addressId = $this->getAddressId($address);
165  $key = $this->getWebsiteId() . '_'
166  . $this->getCustomerGroupId() . '_'
167  . $this->getCouponCode() . '_'
168  . $addressId;
169  if (!isset($this->_rules[$key])) {
170  $this->_rules[$key] = $this->_collectionFactory->create()
171  ->setValidationFilter(
172  $this->getWebsiteId(),
173  $this->getCustomerGroupId(),
174  $this->getCouponCode(),
175  null,
176  $address
177  )
178  ->addFieldToFilter('is_active', 1)
179  ->load();
180  }
181  return $this->_rules[$key];
182  }
getAddressId(Address $address)
Definition: Validator.php:188
$address
Definition: customer.php:38

◆ canApplyRules()

canApplyRules ( AbstractItem  $item)

Can apply rules check

Parameters
AbstractItem$item
Returns
bool

Definition at line 223 of file Validator.php.

224  {
225  $address = $item->getAddress();
226  foreach ($this->_getRules($address) as $rule) {
227  if (!$this->validatorUtility->canProcessRule($rule, $address) || !$rule->getActions()->validate($item)) {
228  return false;
229  }
230  }
231 
232  return true;
233  }
$address
Definition: customer.php:38
_getRules(Address $address=null)
Definition: Validator.php:162

◆ decrementRuleItemTotalsCount()

decrementRuleItemTotalsCount (   $key)
Parameters
int$key
Returns
$this

Definition at line 539 of file Validator.php.

540  {
541  $this->_rulesItemTotals[$key]['items_count']--;
542 
543  return $this;
544  }

◆ getAddressId()

getAddressId ( Address  $address)
protected
Parameters
Address$address
Returns
string

Definition at line 188 of file Validator.php.

189  {
190  if ($address == null) {
191  return '';
192  }
193  if (!$address->hasData('address_sales_rule_id')) {
194  if ($address->hasData('address_id')) {
195  $address->setData('address_sales_rule_id', $address->getData('address_id'));
196  } else {
197  $type = $address->getAddressType();
198  $tempId = $type . $this->counter++;
199  $address->setData('address_sales_rule_id', $tempId);
200  }
201  }
202  return $address->getData('address_sales_rule_id');
203  }
$address
Definition: customer.php:38
$type
Definition: item.phtml:13

◆ getItemBaseOriginalPrice()

getItemBaseOriginalPrice (   $item)

Return item base original price

Parameters
AbstractItem$item
Returns
float

Definition at line 464 of file Validator.php.

465  {
466  return $this->_catalogData->getTaxPrice($item, $item->getBaseOriginalPrice(), true);
467  }

◆ getItemBasePrice()

getItemBasePrice (   $item)

Return item base price

Parameters
AbstractItem$item
Returns
float

Definition at line 452 of file Validator.php.

453  {
454  $price = $item->getDiscountCalculationPrice();
455  return $price !== null ? $item->getBaseDiscountCalculationPrice() : $item->getBaseCalculationPrice();
456  }
$price

◆ getItemOriginalPrice()

getItemOriginalPrice (   $item)

Return item original price

Parameters
AbstractItem$item
Returns
float

Definition at line 441 of file Validator.php.

442  {
443  return $this->_catalogData->getTaxPrice($item, $item->getOriginalPrice(), true);
444  }

◆ getItemPrice()

getItemPrice (   $item)

Return item price

Parameters
AbstractItem$item
Returns
float

Definition at line 428 of file Validator.php.

429  {
430  $price = $item->getDiscountCalculationPrice();
431  $calcPrice = $item->getCalculationPrice();
432  return $price === null ? $calcPrice : $price;
433  }
$price

◆ getRuleItemTotalsInfo()

getRuleItemTotalsInfo (   $key)
Parameters
int$key
Returns
array
Exceptions

Definition at line 526 of file Validator.php.

527  {
528  if (empty($this->_rulesItemTotals[$key])) {
529  throw new \Magento\Framework\Exception\LocalizedException(__('Item totals are not set for the rule.'));
530  }
531 
532  return $this->_rulesItemTotals[$key];
533  }
__()
Definition: __.php:13

◆ init()

init (   $websiteId,
  $customerGroupId,
  $couponCode 
)

Init validator Init process load collection of rules for specific website, customer group and coupon code

Parameters
int$websiteId
int$customerGroupId
string$couponCode
Returns
$this

Definition at line 149 of file Validator.php.

150  {
151  $this->setWebsiteId($websiteId)->setCustomerGroupId($customerGroupId)->setCouponCode($couponCode);
152 
153  return $this;
154  }

◆ prepareDescription()

prepareDescription (   $address,
  $separator = ',
 
)

Convert address discount description array to string

Parameters
Address$address
string$separator
Returns
$this

Definition at line 476 of file Validator.php.

477  {
478  $descriptionArray = $address->getDiscountDescriptionArray();
479  if (!$descriptionArray && $address->getQuote()->getItemVirtualQty() > 0) {
480  $descriptionArray = $address->getQuote()->getBillingAddress()->getDiscountDescriptionArray();
481  }
482 
483  $description = $descriptionArray && is_array(
484  $descriptionArray
485  ) ? implode(
486  $separator,
487  array_unique($descriptionArray)
488  ) : '';
489 
490  $address->setDiscountDescription($description);
491  return $this;
492  }
$address
Definition: customer.php:38

◆ process()

process ( AbstractItem  $item)

Quote item discount calculation process

Parameters
AbstractItem$item
Returns
$this

Definition at line 259 of file Validator.php.

260  {
261  $item->setDiscountAmount(0);
262  $item->setBaseDiscountAmount(0);
263  $item->setDiscountPercent(0);
264 
265  $itemPrice = $this->getItemPrice($item);
266  if ($itemPrice < 0) {
267  return $this;
268  }
269 
270  $appliedRuleIds = $this->rulesApplier->applyRules(
271  $item,
272  $this->_getRules($item->getAddress()),
273  $this->_skipActionsValidation,
274  $this->getCouponCode()
275  );
276  $this->rulesApplier->setAppliedRuleIds($item, $appliedRuleIds);
277 
278  return $this;
279  }
_getRules(Address $address=null)
Definition: Validator.php:162

◆ processShippingAmount()

processShippingAmount ( Address  $address)

Apply discounts to shipping amount

Parameters
Address$address
Returns
$this @SuppressWarnings(PHPMD.CyclomaticComplexity)

Definition at line 288 of file Validator.php.

289  {
290  $shippingAmount = $address->getShippingAmountForDiscount();
291  if ($shippingAmount !== null) {
292  $baseShippingAmount = $address->getBaseShippingAmountForDiscount();
293  } else {
294  $shippingAmount = $address->getShippingAmount();
295  $baseShippingAmount = $address->getBaseShippingAmount();
296  }
297  $quote = $address->getQuote();
298  $appliedRuleIds = [];
299  foreach ($this->_getRules($address) as $rule) {
300  /* @var \Magento\SalesRule\Model\Rule $rule */
301  if (!$rule->getApplyToShipping() || !$this->validatorUtility->canProcessRule($rule, $address)) {
302  continue;
303  }
304 
305  $discountAmount = 0;
306  $baseDiscountAmount = 0;
307  $rulePercent = min(100, $rule->getDiscountAmount());
308  switch ($rule->getSimpleAction()) {
309  case \Magento\SalesRule\Model\Rule::TO_PERCENT_ACTION:
310  $rulePercent = max(0, 100 - $rule->getDiscountAmount());
311  // break is intentionally omitted
312  case \Magento\SalesRule\Model\Rule::BY_PERCENT_ACTION:
313  $discountAmount = ($shippingAmount - $address->getShippingDiscountAmount()) * $rulePercent / 100;
314  $baseDiscountAmount = ($baseShippingAmount -
315  $address->getBaseShippingDiscountAmount()) * $rulePercent / 100;
316  $discountPercent = min(100, $address->getShippingDiscountPercent() + $rulePercent);
317  $address->setShippingDiscountPercent($discountPercent);
318  break;
319  case \Magento\SalesRule\Model\Rule::TO_FIXED_ACTION:
320  $quoteAmount = $this->priceCurrency->convert($rule->getDiscountAmount(), $quote->getStore());
321  $discountAmount = $shippingAmount - $quoteAmount;
322  $baseDiscountAmount = $baseShippingAmount - $rule->getDiscountAmount();
323  break;
324  case \Magento\SalesRule\Model\Rule::BY_FIXED_ACTION:
325  $quoteAmount = $this->priceCurrency->convert($rule->getDiscountAmount(), $quote->getStore());
326  $discountAmount = $quoteAmount;
327  $baseDiscountAmount = $rule->getDiscountAmount();
328  break;
329  case \Magento\SalesRule\Model\Rule::CART_FIXED_ACTION:
330  $cartRules = $address->getCartFixedRules();
331  if (!isset($cartRules[$rule->getId()])) {
332  $cartRules[$rule->getId()] = $rule->getDiscountAmount();
333  }
334  if ($cartRules[$rule->getId()] > 0) {
335  $quoteAmount = $this->priceCurrency->convert($cartRules[$rule->getId()], $quote->getStore());
336  $discountAmount = min($shippingAmount - $address->getShippingDiscountAmount(), $quoteAmount);
337  $baseDiscountAmount = min(
338  $baseShippingAmount - $address->getBaseShippingDiscountAmount(),
339  $cartRules[$rule->getId()]
340  );
341  $cartRules[$rule->getId()] -= $baseDiscountAmount;
342  }
343 
344  $address->setCartFixedRules($cartRules);
345  break;
346  }
347 
348  $discountAmount = min($address->getShippingDiscountAmount() + $discountAmount, $shippingAmount);
349  $baseDiscountAmount = min(
350  $address->getBaseShippingDiscountAmount() + $baseDiscountAmount,
351  $baseShippingAmount
352  );
353  $address->setShippingDiscountAmount($discountAmount);
354  $address->setBaseShippingDiscountAmount($baseDiscountAmount);
355  $appliedRuleIds[$rule->getRuleId()] = $rule->getRuleId();
356 
357  $this->rulesApplier->maintainAddressCouponCode($address, $rule, $this->getCouponCode());
358  $this->rulesApplier->addDiscountDescription($address, $rule);
359  if ($rule->getStopRulesProcessing()) {
360  break;
361  }
362  }
363 
364  $address->setAppliedRuleIds($this->validatorUtility->mergeIds($address->getAppliedRuleIds(), $appliedRuleIds));
365  $quote->setAppliedRuleIds($this->validatorUtility->mergeIds($quote->getAppliedRuleIds(), $appliedRuleIds));
366 
367  return $this;
368  }
$quote
$address
Definition: customer.php:38
_getRules(Address $address=null)
Definition: Validator.php:162

◆ reset()

reset ( Address  $address)

Reset quote and address applied rules

Parameters
Address$address
Returns
$this

Definition at line 241 of file Validator.php.

242  {
243  $this->validatorUtility->resetRoundingDeltas();
244  if ($this->_isFirstTimeResetRun) {
245  $address->setAppliedRuleIds('');
246  $address->getQuote()->setAppliedRuleIds('');
247  $this->_isFirstTimeResetRun = false;
248  }
249 
250  return $this;
251  }
$address
Definition: customer.php:38

◆ setSkipActionsValidation()

setSkipActionsValidation (   $flag)

Set skip actions validation flag

Parameters
bool$flag
Returns
$this

Definition at line 211 of file Validator.php.

212  {
213  $this->_skipActionsValidation = $flag;
214  return $this;
215  }

Field Documentation

◆ $_catalogData

$_catalogData = null
protected

Definition at line 61 of file Validator.php.

◆ $_collectionFactory

$_collectionFactory
protected

Definition at line 66 of file Validator.php.

◆ $_isFirstTimeResetRun

$_isFirstTimeResetRun = true
protected

Definition at line 40 of file Validator.php.

◆ $_rules

$_rules
protected

Definition at line 32 of file Validator.php.

◆ $_rulesItemTotals

$_rulesItemTotals = []
protected

Definition at line 47 of file Validator.php.

◆ $_skipActionsValidation

$_skipActionsValidation = false
protected

Definition at line 54 of file Validator.php.

◆ $counter

$counter = 0
protected

Definition at line 98 of file Validator.php.

◆ $messageManager

$messageManager
protected

Definition at line 91 of file Validator.php.

◆ $priceCurrency

$priceCurrency
protected

Definition at line 81 of file Validator.php.

◆ $rulesApplier

$rulesApplier
protected

Definition at line 76 of file Validator.php.

◆ $validators

$validators
protected

Definition at line 86 of file Validator.php.

◆ $validatorUtility

$validatorUtility
protected

Definition at line 71 of file Validator.php.


The documentation for this class was generated from the following file: