2017-09-14 6 views
7

J'ai créé une nouvelle table dans Magento 2, pour stocker des promorules personnalisés, maintenant j'ai créé observateur pour l'événement controller_action_predispatch_checkout_cart_couponPost et à l'intérieur de cet observateur je veux vérifier si l'utilisateur a entré une règle personnalisée appliquer une réduction en fonction de cette règle.Appliquer la règle promo personnalisée en utilisant observateur dans Magento 2

Ci-dessous mon code:

<?php 
namespace Webkul\Grid\Observer; 

use Magento\Framework\Event\ObserverInterface; 

class coupenAppliedAfter implements ObserverInterface 
{ 
    /** 
    * @var ObjectManagerInterface 
    */ 
    protected $_objectManager; 

    /** 
    * @param \Magento\Framework\ObjectManagerInterface $objectManager 
    */ 
    public function __construct(
     \Magento\Framework\ObjectManagerInterface $objectManager 
    ) { 
     $this->_objectManager = $objectManager; 
    } 

    /** 
    * customer register event handler 
    * 
    * @param \Magento\Framework\Event\Observer $observer 
    * @return void 
    */ 
    public function execute(\Magento\Framework\Event\Observer $observer) 
    { 
     // get enetered coupen code 
     $controller = $observer->getControllerAction(); 
     $couponCode = $controller->getRequest()->getParam('coupon_code'); 

     $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
     $connection = $objectManager->get('Magento\Framework\App\ResourceConnection')->getConnection('\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION'); 
     // get list of coupon codes from that custom table 
     $all_custom_codes = $connection->fetchAll("SELECT * FROM custom_promotion_rules"); 

     foreach($all_custom_codes as $code) { 
      $db_coupen_code = $code['code']; 
      // matching if user has entered any custom code 
      if($couponCode == $db_coupen_code) { 
       // if yes trying to apply custom discount 
       $DiscountAmount = $code['discount_amount']; 
       $result = $observer->getEvent()->getResult(); 
       $result->setAmount($DiscountAmount); 
       $result->setBaseAmount($DiscountAmount); 
      } 
     } 

    } 
} 

mais au-dessus du code ne fonctionne pas et l'erreur donnant Fatal error: Uncaught Error: Call to a member function setAmount() on null

S'il vous plaît suggérer une solution pour cela.

+0

Que produit var_dump ($ result)? – TheRealJAG

Répondre

0

$ Le résultat est nul. Essayez-vous d'exécuter cette fonction manuellement? Si vous l'êtes, cela pourrait être votre problème puisque $ observateur serait vide ou nul.

Je voudrais également déplacer l'initialisation de $ result au-dessus de l'instruction foreach.