Calculator.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * Shopping Cart Rule data model
  8. *
  9. * @author Magento Core Team <core@magentocommerce.com>
  10. */
  11. namespace Magento\OfflineShipping\Model\SalesRule;
  12. use Magento\SalesRule\Model\Validator;
  13. /**
  14. * @api
  15. * @since 100.0.2
  16. */
  17. class Calculator extends Validator
  18. {
  19. /**
  20. * Quote item free shipping ability check
  21. * This process not affect information about applied rules, coupon code etc.
  22. * This information will be added during discount amounts processing
  23. *
  24. * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
  25. * @return \Magento\OfflineShipping\Model\SalesRule\Calculator
  26. */
  27. public function processFreeShipping(\Magento\Quote\Model\Quote\Item\AbstractItem $item)
  28. {
  29. $address = $item->getAddress();
  30. $item->setFreeShipping(false);
  31. foreach ($this->_getRules($address) as $rule) {
  32. /* @var $rule \Magento\SalesRule\Model\Rule */
  33. if (!$this->validatorUtility->canProcessRule($rule, $address)) {
  34. continue;
  35. }
  36. if (!$rule->getActions()->validate($item)) {
  37. continue;
  38. }
  39. switch ($rule->getSimpleFreeShipping()) {
  40. case Rule::FREE_SHIPPING_ITEM:
  41. $item->setFreeShipping($rule->getDiscountQty() ? $rule->getDiscountQty() : true);
  42. break;
  43. case Rule::FREE_SHIPPING_ADDRESS:
  44. $address->setFreeShipping(true);
  45. break;
  46. }
  47. if ($rule->getStopRulesProcessing()) {
  48. break;
  49. }
  50. }
  51. return $this;
  52. }
  53. }