Example #1
0
 /**
  * @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()}");
     }
 }