Come generare regola promozionali in modo dinamico utilizzando il metodo di osservatore / modello?

magento.stackexchange https://magento.stackexchange.com/questions/6068

Domanda

Come faccio a generare regola coupon in modo dinamico utilizzando il metodo di osservatore?

Ho creato sotto la funzione, funziona se creiamo azione del controller ed eseguire. Ma non funziona con osservatore.

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());
    }
}

Qualcuno può avere un'idea, perché questi succede?

È stato utile?

Soluzione

Ho trovato la risposta di domanda di cui sopra.

evento Creato di 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>

Metodo Aggiunto sales_order_save_commit_after in osservatore:

<?php

class 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); 

        } 
    } 

}

Aggiunto sopra la funzione createCoupon nel file del modello:

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);

Come per sintassi di cui sopra, dobbiamo passare parametri come 'id del cliente', 'importo dello sconto', 'durata' (in giorni), e 'discountIn' (come 'by_percent' o 'by_fixed')

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top