There are many ways to activated Cash On Delivery only for admin . I would discourage using Observer events hide it from the end user.
I also suggest not override core files (even if you are not editing them), as that will cause upgrade problems in the future.
you can create your custom module like below :
/app/etc/modules/Namespace_Module.xml
<?xml version="1.0"?> <config> <modules> <Namespace_Module> <active>true</active> <codePool>local</codePool> <depends> <Mage_Payment/> </depends> </Namespace_Module> </modules> </config>
/app/code/local/Namespace/Module/etc/config.xml
<?xml version="1.0"?> <config> <modules> <Namespace_Module> <version>0.0.1</version> </Namespace_Module> </modules> <global> <models> <Namespace_Module> <class>Namespace_Module_Model</class> </Namespace_Module> </models> <events> <payment_method_is_active> <observers> <namespace_module> <type>singleton</type> <class>Namespace_Module/Observer</class> <method>paymentMethodIsActive</method> </namespace_module> </observers> </payment_method_is_active> </events> </global> </config>
/app/code/local/Namespace/Module/Model/Observer.php
<?php class Namespace_Module_Model_Observer { public function paymentMethodIsActive($observer) { $instance = $observer->getMethodInstance(); $result = $observer->getResult(); if ($instance->getName() == "checkmo") { if (Mage::app()->getStore()->isAdmin()) { $result->isAvailable = true; } else { $result->isAvailable = false; } } } }
Remark : You can change “Namespace” as per your need.