Guest User

Untitled

a guest
Jan 24th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. <?xml version="1.0"?>
  2. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
  3. <event name="salesrule_validator_process">
  4. <observer name="custom_cart_rules" instance="AlmusbahSendSmsObserverCustomCartPriceRules" />
  5. </event>
  6. </config>
  7.  
  8. }
  9.  
  10. /**
  11. *
  12. * @param MagentoFrameworkEventObserver $observer
  13. * @return void
  14. */
  15. public function execute(MagentoFrameworkEventObserver $observer) {
  16.  
  17. $result = $observer->getEvent()->getResult();
  18. $item = $observer->getEvent()->getItem();
  19. $rule = $observer->getEvent()->getRule();
  20. $address = $observer->getEvent()->getAddress();
  21. $qty = $item->getQty();
  22.  
  23. if ($rule->getData('name') == 'Buy 2 get 1 free'):
  24.  
  25. // overriding magento rules here and updating Almusbah Offer
  26. $result->setAmount(0)
  27. ->setBaseAmount(0)
  28. ->setOriginalAmount(0)
  29. ->setBaseOriginalAmount(0);
  30.  
  31. $item->setDiscountPercent(0);
  32.  
  33.  
  34. $products = [];
  35. $z = 0;
  36. $totalQty = 0;
  37. $dA = 0;
  38. foreach ($address->getAllItems() as $q):
  39.  
  40. $validate = $rule->getActions()->validate($q);
  41.  
  42. if ($validate):
  43. $products[$z]['sku'] = $q->getData('sku');
  44. $products[$z]['qty'] = $q->getData('qty');
  45. $totalQty += $q->getData('qty');
  46. $products[$z]['totalQty'] = $totalQty;
  47. $freeQty = (int) ($totalQty / 3);
  48. $products[$z]['freeQty'] = $freeQty;
  49. if ($products[$z]['freeQty'] > 0):
  50. $products[$z]['applyDiscount'] = 1;
  51. $dicountPercent = 100;
  52. $dA = ($products[$z]['freeQty'] * $q->getData('price'));
  53. $products[$z]['discountAmount'] = $dA;
  54. $totalQty -= 3*$products[$z]['freeQty']; // appying on each 3 items
  55. endif;
  56. $z++;
  57. endif;
  58. endforeach;
  59. //echo '<pre>';print_r($products);
  60. $chkCurrentSku = $item->getSku();
  61.  
  62. foreach ($products as $p):
  63. if(isset($p['applyDiscount']) && !empty($p['applyDiscount']) && $chkCurrentSku == $p['sku']):
  64. $discountAmount = $p['discountAmount'];
  65. $fullDiscount = 100;
  66. $item->setDiscountPercent($fullDiscount);
  67. $this->almusbahBuy2Get1Offer($discountAmount,$result);
  68. endif;
  69. endforeach;
  70.  
  71. endif;
  72.  
  73.  
  74. }
  75.  
  76. public function almusbahBuy2Get1Offer($discountAmount, $result) {
  77.  
  78. $result->setAmount($discountAmount)
  79. ->setBaseAmount($discountAmount)
  80. ->setOriginalAmount($discountAmount)
  81. ->setBaseOriginalAmount($discountAmount);
  82. }
  83.  
  84. }
Add Comment
Please, Sign In to add comment