Magento – Programatically create credit memo

creditmemomagento-1.9programmaticallyrefund

I am working on script and want to know about how magento credit memo created. My requirement is same as magento after update quantities of product in order, hit update order button. Then enter custom shipping , custom Adjustment Refund , custom Adjustment Fee. How this work programatically.

Best Answer

Try this :

<?php
require_once('app/Mage.php');
Mage::app('default');

class creditmemo
{
    public function index()    
    {
        $creditmemoData = array(
        'qtys' => array('order_item_id' => 3, 'qty' => '1'),
        'shipping_amount' => null,
        'adjustment_positive' => '0',
        'adjustment_negative' => null
    );

     $comment= 'comment for credit memo';

     $notifyCustomer =  true;
     $includeComment = false;
     $refundToStoreCreditAmount= '1';            
        $order = Mage::getModel('sales/order')->load(101);
        //OR $order = Mage::getModel('sales/order')->loadByIncrementId('100001');

        // Case : 1 partial credit memo

            /*$orderItem = $order->getItemsCollection()->getItemByColumnValue('sku', 'test-1');
            $creditmemoData = array(
                'qtys' => array( $orderItem->getId() => 1)
            );*/


        // Case : 2 full credit memo 
        // $creditmemoData = array();  

        /** @var $service Mage_Sales_Model_Service_Order */
        $service = Mage::getModel('sales/service_order', $order);
        /** @var $creditmemo Mage_Sales_Model_Order_Creditmemo */
        $creditmemo = $service->prepareCreditmemo($creditmemoData);

        $creditmemo->setPaymentRefundDisallowed(true)->register();
        // add comment to creditmemo
        if (!empty($comment)) {
            $creditmemo->addComment($comment, $notifyCustomer);
        }
        try {
            Mage::getModel('core/resource_transaction')
                ->addObject($creditmemo)
                ->addObject($order)
                ->save();
            // send email notification
            $creditmemo->sendEmail($notifyCustomer, ($includeComment ? $comment : ''));
        } catch (Mage_Core_Exception $e) {
             $e->getMessage();
        }
        return $creditmemo->getIncrementId();
    }
}
$obj = new creditmemo();
$obj->index();
?>
Related Topic