Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ByPercent.php
Go to the documentation of this file.
1 <?php
7 
9 {
16  public function calculate($rule, $item, $qty)
17  {
18  $rulePercent = min(100, $rule->getDiscountAmount());
19  $discountData = $this->_calculate($rule, $item, $qty, $rulePercent);
20 
21  return $discountData;
22  }
23 
29  public function fixQuantity($qty, $rule)
30  {
31  $step = $rule->getDiscountStep();
32  if ($step) {
33  $qty = floor($qty / $step) * $step;
34  }
35 
36  return $qty;
37  }
38 
46  protected function _calculate($rule, $item, $qty, $rulePercent)
47  {
49  $discountData = $this->discountFactory->create();
50 
51  $itemPrice = $this->validator->getItemPrice($item);
52  $baseItemPrice = $this->validator->getItemBasePrice($item);
53  $itemOriginalPrice = $this->validator->getItemOriginalPrice($item);
54  $baseItemOriginalPrice = $this->validator->getItemBaseOriginalPrice($item);
55 
56  $_rulePct = $rulePercent / 100;
57  $discountData->setAmount(($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct);
58  $discountData->setBaseAmount(($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct);
59  $discountData->setOriginalAmount(($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct);
60  $discountData->setBaseOriginalAmount(
61  ($qty * $baseItemOriginalPrice - $item->getBaseDiscountAmount()) * $_rulePct
62  );
63 
64  if (!$rule->getDiscountQty() || $rule->getDiscountQty() > $qty) {
65  $discountPercent = min(100, $item->getDiscountPercent() + $rulePercent);
66  $item->setDiscountPercent($discountPercent);
67  }
68 
69  return $discountData;
70  }
71 }