/** * This function is overriden because Magento will consider a transaction for voiding only if it is an authorization * Braintree allows voiding captures too * * Lookup an authorization transaction using parent transaction id, if set * @return Mage_Sales_Model_Order_Payment_Transaction|false */ public function getAuthorizationTransaction() { if ($this->getMethodInstance()->getCode() == Braintree_Payments_Model_Creditcard::PAYMENT_METHOD_CODE) { $invoice = Mage::registry('current_invoice'); $collection = false; if ($invoice && $invoice->getId()) { $transactionId = Mage::helper('braintree_payments')->clearTransactionId($invoice->getTransactionId()); $collection = Mage::getModel('sales/order_payment_transaction')->getCollection()->addFieldToFilter('txn_id', array('eq' => $transactionId)); if ($collection->getSize() < 1) { $collection = false; } } else { if (($order = Mage::registry('current_order')) && $order->getId() && $order->hasInvoices()) { if ((bool) Mage::registry(self::REGISTRY_KEY_CANCEL)) { $collection = Mage::getModel('sales/order_payment_transaction')->getCollection()->addFieldToFilter('payment_id', array('eq' => $this->getId()))->addFieldToFilter('txn_type', array('eq' => Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE)); if ($collection->getSize() >= 1) { return false; } } else { return false; } } } if (!$collection) { $collection = Mage::getModel('sales/order_payment_transaction')->getCollection()->setOrderFilter($this->getOrder())->addPaymentIdFilter($this->getId())->setOrder('created_at', Varien_Data_Collection::SORT_ORDER_DESC)->setOrder('transaction_id', Varien_Data_Collection::SORT_ORDER_DESC); } foreach ($collection as $txn) { $txn->setOrderPaymentObject($this); $this->_transactionsLookup[$txn->getTxnId()] = $txn; $txn->setParentId($txn->getId()); return $txn; } } else { return parent::getAuthorizationTransaction(); } }