如何使用观察者/模型方法动态生成优惠券规则?
-
16-10-2019 - |
题
如何使用观察者方法动态生成优惠券规则?
我创建了以下函数,如果我们创建控制器操作并运行,它可以正常工作。但不与观察者合作。
function createCoupon($customer_id, $discount,$days,$type)
{
$customer = Mage::getModel('customer/customer')->load($customer_id);
$customerGroupIds = Mage::getModel('customer/group')->getCollection()->getAllIds();
$websitesId = Mage::getModel('core/website')->getCollection()->getAllIds();
$customer_name = $customer->getName();
$couponCode = Mage::helper('core')->getRandomString(9);
$model = Mage::getModel('salesrule/rule');
$model->setName('Discount for ' . $customer_name);
$model->setDescription('Discount for ' . $customer_name);
$model->setFromDate(date('Y-m-d'));
$model->setToDate(date('Y-m-d', strtotime('+'.$days.' days')));
$model->setCouponType(2);
$model->setCouponCode($couponCode);
$model->setUsesPerCoupon(1);
$model->setUsesPerCustomer(1);
$model->setCustomerGroupIds($customerGroupIds);
$model->setIsActive(1);
$model->setConditionsSerialized('a:6:{s:4:\"type\";s:32:\"salesrule/rule_condition_combine\";s:9:\"attribute\";N;s:8:\"operator\";N;s:5:\"value\";s:1:\"1\";s:18:\"is_value_processed\";N;s:10:\"aggregator\";s:3:\"all\";}');
$model->setActionsSerialized('a:6:{s:4:\"type\";s:40:\"salesrule/rule_condition_product_combine\";s:9:\"attribute\";N;s:8:\"operator\";N;s:5:\"value\";s:1:\"1\";s:18:\"is_value_processed\";N;s:10:\"aggregator\";s:3:\"all\";}');
$model->setStopRulesProcessing(0);
$model->setIsAdvanced(1);
$model->setProductIds('');
$model->setSortOrder(1);
$model->setSimpleAction($type);//$model->setSimpleAction('by_fixed');
$model->setDiscountAmount($discount);
$model->setDiscountStep(0);
$model->setSimpleFreeShipping(0);
$model->setTimesUsed(0);
$model->setIsRss(0);
$model->setWebsiteIds($websitesId);
try {
$model->save();
} catch (Exception $e) {
Mage::log($e->getMessage());
}
}
谁能知道,为什么会发生这些?
解决方案
我找到了上述问题的答案。
创建的sales_order_status_after的事件
<events>
<sales_order_save_commit_after>
<observers>
<modulename>
<type>singleton</type>
<class>Mycompany_Offer_Model_Observer</class>
<method>sales_order_save_commit_after</method>
</modulename>
</observers>
</sales_order_save_commit_after>
</events>
在观察者中添加了Method Sales_order_save_save_commit_after:
<?php
类mycompany_offer_model_observer {
public function sales_order_save_commit_after(Varien_Event_Observer $observer)
{
$order = $observer->getOrder();
if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE){
$orderTotal = $order->getBaseSubTotal();
$customerId = 0;
if($customerId = $order->getCustomerId())
{
$customer_id = $customer->getId();
}
$discountAmount = 10;
$duration = 30;
$discountIn = 'by_fixed';
Mage::getModel('offer/offer')->createCoupon($customer_id, $discountAmount, $duration, $discountIn);
}
}
}
在模型文件中添加了以上函数createCoupon:
class Mycompany_Offer_Model_Offer extends Mage_Core_Model_Abstract
/**
* Function to create coupon dynamically
*
* @param int $customer_id
* @param int $discount
* @param int $days
* @param text $type
* @return nothing
*/
public function createCoupon($customer_id, $discount,$days,$type)
{
$customer = Mage::getModel('customer/customer')->load($customer_id);
$customerGroupIds = Mage::getModel('customer/group')->getCollection()->getAllIds();
$websitesId = Mage::getModel('core/website')->getCollection()->getAllIds();
$customer_name = $customer->getName();
$couponCode = Mage::helper('core')->getRandomString(9);
$model = Mage::getModel('salesrule/rule');
$model->setName('Discount for ' . $customer_name);
$model->setDescription('Discount for ' . $customer_name);
$model->setFromDate(date('Y-m-d'));
$model->setToDate(date('Y-m-d', strtotime('+'.$days.' days')));
$model->setCouponType(2);
$model->setCouponCode($couponCode);
$model->setUsesPerCoupon(1);
$model->setUsesPerCustomer(1);
$model->setCustomerGroupIds($customerGroupIds);
$model->setIsActive(1);
$model->setConditionsSerialized('');
$model->setActionsSerialized('');
$model->setStopRulesProcessing(0);
$model->setIsAdvanced(1);
$model->setProductIds('');
$model->setSortOrder(1);
$model->setSimpleAction($type);//$model->setSimpleAction('by_fixed');
$model->setDiscountAmount($discount);
$model->setDiscountStep(0);
$model->setSimpleFreeShipping(0);
$model->setTimesUsed(0);
$model->setIsRss(0);
$model->setWebsiteIds($websitesId);
try {
$model->save();
return $model->getData();
} catch (Exception $e) {
print_r($e->getMessage());exit;
Mage::log($e->getMessage());
}
}
}
Mage::getModel('offer/offer')->createCoupon($customer_id, $discountAmount, $duration, $discountIn);
根据上述语法,我们必须传递“客户ID”,“折扣金额”,“持续时间”(在几天)和'discountin'(例如'by_percent'或by_fixed')之类的参数。