How to Disable Cash On Delivery for Specific Product Types in Magento 1.9

cash-on-deliverymagento-1.9payment-methodsstore-credit

Basically I need to disable cash on delivery on specific product type.
Basically i m using store credit of mage store. This is for wallet in magento.
on payment option its showing cash on delivery . its a not a physical or virtual product. So i need to disable cash on delivery on this product type.

Best Answer

You can do this by Magento Event/Observer

First,using payment_method_is_active disable on depends current quote product type.

Code for this:

Module config.xml code:

<global>
    <events>
    <payment_method_is_active>
        <observers>
            <paymentfilter_payment_method_is_active>
            <type>singleton</type>
            <class>yourmodel/observer</class>
            <method>filterpaymentmethod</method>
            </paymentfilter_payment_method_is_active>
        </observers>
    </payment_method_is_active>
    </events>
</global>

Observer code is:

<?php

class YOURNANESPACE_YOURMODULE_Model_Observer {

    public function filterpaymentmethod(Varien_Event_Observer $observer) {
        /* call get payment method */
        $method = $observer->getEvent()->getMethodInstance();

        /*   get  Quote  */
        $quote = $observer->getEvent()->getQuote();

        $result = $observer->getEvent()->getResult();
        if (empty($quote) || (null === $quote)) {
            return $this;
        }

        /* Disable Your payment method for   adminStore */
        if ($method->getCode() == 'YOUR_PAYMENT_METHOD_CODE') {
            foreach ($quote->getAllItems() as $item) {
                // get Cart item product Type //
                if ($item->getProductType() == 'YourProductType'):
                    $result->isAvailable = false;
                endif;
            }
        }
    }

}
Related Topic