如何使用观察者方法动态生成优惠券规则?

我创建了以下函数,如果我们创建控制器操作并运行,它可以正常工作。但不与观察者合作。

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')之类的参数。

许可以下: CC-BY-SA归因
scroll top