*/ class Mage_Payment_Model_Observer { /** * Set forced canCreditmemo flag * * @param Varien_Event_Observer $observer * @return Mage_Payment_Model_Observer */ public function salesOrderBeforeSave($observer) { $order = $observer->getEvent()->getOrder(); if ($order->getPayment()->getMethodInstance()->getCode() != 'free') { return $this; } if ($order->canUnhold()) { return $this; } if ($order->isCanceled() || $order->getState() === Mage_Sales_Model_Order::STATE_CLOSED) { return $this; } /** * Allow forced creditmemo just in case if it wasn't defined before */ if (!$order->hasForcedCanCreditmemo()) { $order->setForcedCanCreditmemo(true); } return $this; } /** * Collect buy request and set it as custom option * * Also sets the collected information and schedule as informational static options * * @param Varien_Event_Observer $observer */ public function prepareProductRecurringProfileOptions($observer) { $product = $observer->getEvent()->getProduct(); $buyRequest = $observer->getEvent()->getBuyRequest(); if (!$product->isRecurring()) { return; } $profile = Mage::getModel('payment/recurring_profile') ->setLocale(Mage::app()->getLocale()) ->setStore(Mage::app()->getStore()) ->importBuyRequest($buyRequest) ->importProduct($product); if (!$profile) { return; } // add the start datetime as product custom option $product->addCustomOption(Mage_Payment_Model_Recurring_Profile::PRODUCT_OPTIONS_KEY, serialize(array('start_datetime' => $profile->getStartDatetime())) ); // duplicate as 'additional_options' to render with the product statically $infoOptions = array(array( 'label' => $profile->getFieldLabel('start_datetime'), 'value' => $profile->exportStartDatetime(true), )); foreach ($profile->exportScheduleInfo() as $info) { $infoOptions[] = array( 'label' => $info->getTitle(), 'value' => $info->getSchedule(), ); } $product->addCustomOption('additional_options', serialize($infoOptions)); } /** * Sets current instructions for bank transfer account * * @param Varien_Event_Observer $observer * @return void */ public function beforeOrderPaymentSave(Varien_Event_Observer $observer) { /** @var Mage_Sales_Model_Order_Payment $payment */ $payment = $observer->getEvent()->getPayment(); if($payment->getMethod() === Mage_Payment_Model_Method_Banktransfer::PAYMENT_METHOD_BANKTRANSFER_CODE) { $payment->setAdditionalInformation('instructions', $payment->getMethodInstance()->getInstructions()); } } }