Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0"?>
- <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
- <event name="salesrule_validator_process">
- <observer name="custom_cart_rules" instance="AlmusbahSendSmsObserverCustomCartPriceRules" />
- </event>
- </config>
- }
- /**
- *
- * @param MagentoFrameworkEventObserver $observer
- * @return void
- */
- public function execute(MagentoFrameworkEventObserver $observer) {
- $result = $observer->getEvent()->getResult();
- $item = $observer->getEvent()->getItem();
- $rule = $observer->getEvent()->getRule();
- $address = $observer->getEvent()->getAddress();
- $qty = $item->getQty();
- if ($rule->getData('name') == 'Buy 2 get 1 free'):
- // overriding magento rules here and updating Almusbah Offer
- $result->setAmount(0)
- ->setBaseAmount(0)
- ->setOriginalAmount(0)
- ->setBaseOriginalAmount(0);
- $item->setDiscountPercent(0);
- $products = [];
- $z = 0;
- $totalQty = 0;
- $dA = 0;
- foreach ($address->getAllItems() as $q):
- $validate = $rule->getActions()->validate($q);
- if ($validate):
- $products[$z]['sku'] = $q->getData('sku');
- $products[$z]['qty'] = $q->getData('qty');
- $totalQty += $q->getData('qty');
- $products[$z]['totalQty'] = $totalQty;
- $freeQty = (int) ($totalQty / 3);
- $products[$z]['freeQty'] = $freeQty;
- if ($products[$z]['freeQty'] > 0):
- $products[$z]['applyDiscount'] = 1;
- $dicountPercent = 100;
- $dA = ($products[$z]['freeQty'] * $q->getData('price'));
- $products[$z]['discountAmount'] = $dA;
- $totalQty -= 3*$products[$z]['freeQty']; // appying on each 3 items
- endif;
- $z++;
- endif;
- endforeach;
- //echo '<pre>';print_r($products);
- $chkCurrentSku = $item->getSku();
- foreach ($products as $p):
- if(isset($p['applyDiscount']) && !empty($p['applyDiscount']) && $chkCurrentSku == $p['sku']):
- $discountAmount = $p['discountAmount'];
- $fullDiscount = 100;
- $item->setDiscountPercent($fullDiscount);
- $this->almusbahBuy2Get1Offer($discountAmount,$result);
- endif;
- endforeach;
- endif;
- }
- public function almusbahBuy2Get1Offer($discountAmount, $result) {
- $result->setAmount($discountAmount)
- ->setBaseAmount($discountAmount)
- ->setOriginalAmount($discountAmount)
- ->setBaseOriginalAmount($discountAmount);
- }
- }
Add Comment
Please, Sign In to add comment