/** * Render block html * * @return string */ protected function _toHtml() { $this->setTxnIdHtml($this->escapeHtml($this->_txn->getTxnId())); $this->setParentTxnIdUrlHtml($this->escapeHtml($this->getUrl('sales/transactions/view', ['txn_id' => $this->_txn->getParentId()]))); $this->setParentTxnIdHtml($this->escapeHtml($this->_txn->getParentTxnId())); $this->setOrderIncrementIdHtml($this->escapeHtml($this->_txn->getOrder()->getIncrementId())); $this->setTxnTypeHtml($this->escapeHtml($this->_txn->getTxnType())); $this->setOrderIdUrlHtml($this->escapeHtml($this->getUrl('sales/order/view', ['order_id' => $this->_txn->getOrderId()]))); $this->setIsClosedHtml($this->_txn->getIsClosed() ? __('Yes') : __('No')); $createdAt = strtotime($this->_txn->getCreatedAt()) ? $this->formatDate($this->_txn->getCreatedAt(), \IntlDateFormatter::MEDIUM, true) : __('N/A'); $this->setCreatedAtHtml($this->escapeHtml($createdAt)); return parent::_toHtml(); }
/** * Update transaction ids for further processing * If no transactions were set before invoking, may generate an "offline" transaction id * * @param OrderPaymentInterface $payment * @param string $type * @param bool|Transaction $transactionBasedOn * @return string|null */ public function generateTransactionId(OrderPaymentInterface $payment, $type, $transactionBasedOn = false) { if (!$payment->getParentTransactionId() && !$payment->getTransactionId() && $transactionBasedOn) { $payment->setParentTransactionId($transactionBasedOn->getTxnId()); } // generate transaction id for an offline action or payment method that didn't set it if (($parentTxnId = $payment->getParentTransactionId()) && !$payment->getTransactionId()) { return "{$parentTxnId}-{$type}"; } return $payment->getTransactionId(); }
/** * Render block html * * @return string */ protected function _toHtml() { $this->setTxnIdHtml($this->escapeHtml($this->_txn->getTxnId())); $this->setParentTxnIdUrlHtml($this->escapeHtml($this->getUrl('sales/transactions/view', array('txn_id' => $this->_txn->getParentId())))); $this->setParentTxnIdHtml($this->escapeHtml($this->_txn->getParentTxnId())); $this->setOrderIncrementIdHtml($this->escapeHtml($this->_txn->getOrder()->getIncrementId())); $this->setTxnTypeHtml($this->escapeHtml($this->_txn->getTxnType())); $this->setOrderIdUrlHtml($this->escapeHtml($this->getUrl('sales/order/view', array('order_id' => $this->_txn->getOrderId())))); $this->setIsClosedHtml($this->_txn->getIsClosed() ? __('Yes') : __('No')); $createdAt = strtotime($this->_txn->getCreatedAt()) ? $this->formatDate($this->_txn->getCreatedAt(), \Magento\Framework\Stdlib\DateTime\TimezoneInterface::FORMAT_TYPE_MEDIUM, true) : __('N/A'); $this->setCreatedAtHtml($this->escapeHtml($createdAt)); return parent::_toHtml(); }
/** * Update transactions in database using provided transaction as parent for them * have to repeat the business logic to avoid accidental injection of wrong transactions * * @param \Magento\Sales\Model\Order\Payment\Transaction $transaction * @return void */ public function injectAsParent(\Magento\Sales\Model\Order\Payment\Transaction $transaction) { $txnId = $transaction->getTxnId(); if ($txnId && \Magento\Sales\Model\Order\Payment\Transaction::TYPE_PAYMENT === $transaction->getTxnType() && ($id = $transaction->getId())) { $connection = $this->getConnection(); // verify such transaction exists, determine payment and order id $verificationRow = $connection->fetchRow($connection->select()->from($this->getMainTable(), ['payment_id', 'order_id'])->where("{$this->getIdFieldName()} = ?", (int) $id)); if (!$verificationRow) { return; } list($paymentId, $orderId) = array_values($verificationRow); // inject $where = [$connection->quoteIdentifier($this->getIdFieldName()) . '!=?' => $id, new \Zend_Db_Expr('parent_id IS NULL'), 'payment_id = ?' => (int) $paymentId, 'order_id = ?' => (int) $orderId, 'parent_txn_id = ?' => $txnId]; $connection->update($this->getMainTable(), ['parent_id' => $id], $where); } }
/** * Update transaction ids for further processing * If no transactions were set before invoking, may generate an "offline" transaction id * * @param string $type * @param bool|Transaction $transactionBasedOn * @return void */ protected function _generateTransactionId($type, $transactionBasedOn = false) { if (!$this->getParentTransactionId() && !$this->getTransactionId() && $transactionBasedOn) { $this->setParentTransactionId($transactionBasedOn->getTxnId()); } // generate transaction id for an offline action or payment method that didn't set it if (($parentTxnId = $this->getParentTransactionId()) && !$this->getTransactionId()) { $this->setTransactionId("{$parentTxnId}-{$type}"); } }
/** * Import details data of specified transaction * * @param Transaction $transactionTo * @return $this */ public function importTransactionInfo(Transaction $transactionTo) { $method = $this->getMethodInstance(); $method->setStore($this->getOrder()->getStoreId()); $data = $method->fetchTransactionInfo($this, $transactionTo->getTxnId()); if ($data) { $transactionTo->setAdditionalInformation(Transaction::RAW_DETAILS, $data); } return $this; }
/** * @param Transaction $transaction * @return array */ private function getPreparedTransactionData(Transaction $transaction) { $additionalInfo = []; foreach ($transaction->getAdditionalInformation() as $value) { $additionalInfo[] = $value; } $expectedData = ['transaction_id' => (int) $transaction->getId()]; if ($transaction->getParentId() !== null) { $expectedData['parent_id'] = (int) $transaction->getParentId(); } $expectedData = array_merge($expectedData, ['order_id' => (int) $transaction->getOrderId(), 'payment_id' => (int) $transaction->getPaymentId(), 'txn_id' => $transaction->getTxnId(), 'parent_txn_id' => $transaction->getParentTxnId() ? (string) $transaction->getParentTxnId() : '', 'txn_type' => $transaction->getTxnType(), 'is_closed' => (int) $transaction->getIsClosed(), 'additional_information' => ['data'], 'created_at' => $transaction->getCreatedAt(), 'child_transactions' => []]); return $expectedData; }
/** * Retrieve header text * * @return \Magento\Framework\Phrase */ public function getHeaderText() { return __("Transaction # %1 | %2", $this->_txn->getTxnId(), $this->formatDate($this->_txn->getCreatedAt(), \IntlDateFormatter::MEDIUM, true)); }
/** * @param TrasactionModel $transactionModel * @param bool $lazy * @return Transaction */ public function extractDto(TrasactionModel $transactionModel, $lazy = false) { /** @var TransactionBuilder $transactionBuilder */ $transactionBuilder = $this->transactionBuilderFactory->create(); $transactionBuilder->setTransactionId($transactionModel->getTransactionId()); $transactionBuilder->setParentId($transactionModel->getParentId()); $transactionBuilder->setOrderId($transactionModel->getOrderId()); $transactionBuilder->setTxnId($transactionModel->getTxnId()); $transactionBuilder->setPaymentId($transactionModel->getPaymentId()); $transactionBuilder->setParentTxnId($transactionModel->getParentTxnId()); $transactionBuilder->setTxnType($transactionModel->getTxnType()); $transactionBuilder->setIsClosed($transactionModel->getIsClosed()); $transactionBuilder->setAdditionalInformation($this->getAdditionalInfo($transactionModel)); $transactionBuilder->setCreatedAt($transactionModel->getCreatedAt()); $transactionBuilder->setMethod($transactionModel->getMethod()); $transactionBuilder->setIncrementId($this->getIncrementId($transactionModel)); $transactionBuilder->setChildTransactions($lazy ? [] : $this->getChildTransactions($transactionModel)); return $transactionBuilder->create(); }
/** * Revert refund * * @param \Magento\Framework\DataObject|InfoInterface|\Magento\Sales\Model\Order\Payment $payment * @param Transaction $transaction * * @return $this * @throws \Exception * @throws LocalizedException */ public function refundReversal(\Magento\Payment\Model\InfoInterface $payment, Transaction $transaction) { $order = $payment->getOrder(); $this->_logger->debug(__METHOD__); $addInfo = $transaction->getAdditionalInformation('raw_details_info'); if (!isset($addInfo['orderNumber']) || !isset($addInfo['creditNumber'])) { throw new LocalizedException($this->_dataHelper->__('Unable to revert refund, creditNumber and/or orderNumber not found!')); } if (!$this->_dataHelper->isBackendAvailable()) { return $this; } $backendClient = $this->_dataHelper->getBackendClient(); $ret = $backendClient->refundReversal($addInfo['orderNumber'], $addInfo['creditNumber']); if ($ret->hasFailed()) { $msg = implode(',', array_map(function ($e) { /** @var \WirecardCEE_QMore_Error $e */ return $e->getConsumerMessage(); }, $ret->getErrors())); $this->_logger->debug(__METHOD__ . ':' . $msg); throw new \Exception($msg); } $transactionId = $transaction->getTxnId() . '-reversal'; $payment->setTransactionId($transactionId); /** @var \Magento\Sales\Model\Order\Payment\Transaction $transaction */ $transaction = $this->_transactionBuilder->setPayment($payment)->setOrder($order)->setTransactionId($transactionId)->build(Transaction::TYPE_VOID); $transaction->setParentId($transaction->getTransactionId()); $transaction->save(); $payment->addTransactionCommentsToOrder($transaction, 'refund reversal: orderNumber:' . $addInfo['orderNumber'] . ' creditNumber:' . $addInfo['creditNumber']); $order->save(); return $this; }