Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
BuyXGetY.php
Go to the documentation of this file.
1 <?php
7 
9 {
16  public function calculate($rule, $item, $qty)
17  {
19  $discountData = $this->discountFactory->create();
20 
21  $itemPrice = $this->validator->getItemPrice($item);
22  $baseItemPrice = $this->validator->getItemBasePrice($item);
23  $itemOriginalPrice = $this->validator->getItemOriginalPrice($item);
24  $baseItemOriginalPrice = $this->validator->getItemBaseOriginalPrice($item);
25 
26  $x = $rule->getDiscountStep();
27  $y = $rule->getDiscountAmount();
28  if (!$x || $y > $x) {
29  return $discountData;
30  }
31  $buyAndDiscountQty = $x + $y;
32 
33  $fullRuleQtyPeriod = floor($qty / $buyAndDiscountQty);
34  $freeQty = $qty - $fullRuleQtyPeriod * $buyAndDiscountQty;
35 
36  $discountQty = $fullRuleQtyPeriod * $y;
37  if ($freeQty > $x) {
38  $discountQty += $freeQty - $x;
39  }
40 
41  $discountData->setAmount($discountQty * $itemPrice);
42  $discountData->setBaseAmount($discountQty * $baseItemPrice);
43  $discountData->setOriginalAmount($discountQty * $itemOriginalPrice);
44  $discountData->setBaseOriginalAmount($discountQty * $baseItemOriginalPrice);
45 
46  return $discountData;
47  }
48 }