Magento订单取消的时候还原优惠券的使用次数(Single Coupon marked as used when payment pending)

方法不难:利用magento的观察者事件,监听“sales_order_payment_cancel”,还原优惠券的使用次数即可。

一、创建一个module

二、config.xml文件如下:


   
   
    
    
    
	    
     
     
	        
      
      
       
       0.1.0
      
      
	    
     
     
    
    
    
    
    
    
        
     
     
            
      
      
                
       
       
         Magetechno_CancelCouponcode_Model 
       
            
      
      
		
     
     
    
     
     
        
      
      
        
       
        
         
         
           singleton 
          
         
           Magetechno_CancelCouponcode_Model_Observer 
          
         
           cancel 
          
         
       
        
      
          
    
     
     
    
    
    

   
   

三、添加Observer.php文件:


   
   getEvent();
  $order = $event->getPayment()->getOrder();
  if ($order->canCancel()) {
    if ($code = $order->getCouponCode()) {
      $coupon = mage::getModel('salesrule/coupon')->load($code,'code');
      if ($coupon->getTimesUsed() > 0) {
        $coupon->setTimesUsed($coupon->getTimesUsed()-1);
        $coupon->save();
      }
      $rule = Mage::getModel('salesrule/rule')->load($coupon->getRuleId());
      if ($rule->getTimesUsed() > 0) {
        $rule->setTimesUsed($rule->getTimesUsed()-1);
        $rule->save();
      }
      if($customerId = $order->getCustomerId()) {
        if ($customerCoupon = Mage::getModel('salesrule/rule_customer')->loadByCustomerRule($customerId, $rule->getId())) {
          $couponUsage = new Varien_Object();
          Mage::getResourceModel('salesrule/coupon_usage')->loadByCustomerCoupon($couponUsage, $customerId, $coupon->getId());
 
          if ($couponUsage->getTimesUsed() > 0) {
 		
            /* I can't find any #@$!@$ interface to do anything but increment a coupon_usage record */
            $resource = Mage::getSingleton('core/resource');
            $writeConnection = $resource->getConnection('core_write');
            $tableName = $resource->getTableName('salesrule_coupon_usage');
 	   Mage::log($couponUsage->getTimesUsed(),null,"coupon_reused.log",true);
	   Mage::log("Coupon used time above",null,"coupon_reused.log",true);
	  if($couponUsage->getTimesUsed()==1)
	{
		$__condition1 = array($writeConnection->quoteInto('coupon_id=?',$coupon->getId()));
		$__condition1 = array($writeConnection->quoteInto('customer_id=?',$customerId));
		if($writeConnection->delete('salesrule_coupon_usage', $__condition1))
			Mage::log("Its deleted from salesrule_coupon_usage",null,"coupon_reused.log",true);
		$__condition2 = array($writeConnection->quoteInto('rule_id=?',$rule->getId()));
		$__condition2 = array($writeConnection->quoteInto('customer_id=?',$customerId));
		if($writeConnection->delete('salesrule_customer', $__condition2))
			Mage::log("Its deleted from salesrule_custome",null,"coupon_reused.log",true);

	}
	else
	{
            $query = "UPDATE {$tableName} SET times_used = times_used-1 " .
              " WHERE coupon_id = {$coupon->getId()} AND customer_id = {$customerId} AND times_used > 0";
 
            $writeConnection->query($query);
		Mage::log("We have updated it",null,"coupon_reused.log",true);
	}
          }
          if ($customerCoupon->getTimesUsed() > 0) {
            $customerCoupon->setTimesUsed($customerCoupon->getTimesUsed()-1);
            $customerCoupon->save();
		//Mage::log('setTimesUsed customer saved Rule Time used');
          }
        }
      }
    }
  }
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值