/** * @desc Handle Refund here * @todo create credit memo && set order status to closed * @param Varien_Object $order * @param Varien_Object $response * @since 0.0.9.2 */ public function refundOrder($order, $response) { //skip orders with [refund-received] $pspReference = trim($response->getData('pspReference')); $result = Mage::getModel('adyen/event')->getEvent($pspReference, '[refund-received]'); if (!empty($result)) { $this->_writeLog("\nSkip refund process, as refund initiated via Magento id: {$order->getIncrementId()}"); return false; } $_mail = (bool) $this->_getConfigData('send_update_mail'); $amount = $response->getValue() / 100; if ($order->canCreditmemo()) { $service = Mage::getModel('sales/service_order', $order); $creditmemo = $service->prepareCreditmemo(); $creditmemo->getOrder()->setIsInProcess(true); //set refund data on the order $creditmemo->setGrandTotal($amount); $creditmemo->setBaseGrandTotal($amount); $creditmemo->save(); try { Mage::getModel('core/resource_transaction')->addObject($creditmemo)->addObject($creditmemo->getOrder())->save(); //refund $creditmemo->refund(); $transactionSave = Mage::getModel('core/resource_transaction')->addObject($creditmemo)->addObject($creditmemo->getOrder()); if ($creditmemo->getInvoice()) { $transactionSave->addObject($creditmemo->getInvoice()); } $transactionSave->save(); if ($_mail) { $creditmemo->getOrder()->setCustomerNoteNotify(true); $creditmemo->sendEmail(); } } catch (Exception $e) { $this->_writeLog($e->getMessage()); } } else { $this->_writeLog("\nOrder can not refund {$order->getIncrementId()}"); } }