/** * execute if transaction was confirmed * * @param SofortLib_TransactionData $transData * @param Mage_Sales_Model_Order $order * @param boolean $forceInvoice = false to create invoice for rechnung, ignoring transaction status * @return void */ private function _transactionConfirmed($transData, $order, $forceInvoice = false) { // unconfirmed notification not process // only rechnung needed if ($order->getState() != 'sofort' && $transData->isSofortrechnung()) { $this->_transactionUnconfirmed($transData, $order, true); } $payment = $order->getPayment(); $paymentObj = $order->getPayment()->getMethodInstance(); $amount = $forceInvoice ? $transData->getAmount() + $transData->getAmountRefunded() : $transData->getAmount(); $currency = $transData->getCurrency(); $statusReason = $transData->getStatusReason(); $transaction = $transData->getTransaction(); // should send a email $notifyCustomer = false; // status the order will be changed $newOrderStatus = $paymentObj->getConfigData('order_status'); // rechnung bestätigt if ($transData->isSofortrechnung() && ($statusReason == 'not_credited_yet' && $transData->getInvoiceStatus() == 'pending' || $forceInvoice)) { $notifyCustomer = false; $newOrderStatus = Mage::getStoreConfig('payment/sofort/sofortrechnung_order_status'); if ($transData->getInvoiceType() == 'OR') { // is process as invoice $invoice = array('number' => $transData->getInvoiceNumber(), 'bank_holder' => $transData->getInvoiceBankHolder(), 'bank_account_number' => $transData->getInvoiceBankAccountNumber(), 'bank_code' => $transData->getInvoiceBankCode(), 'bank_name' => $transData->getInvoiceBankName(), 'reason' => $transData->getInvoiceReason(1) . ' ' . $transData->getInvoiceReason(2), 'date' => $transData->getInvoiceDate(), 'due_date' => $transData->getInvoiceDueDate(), 'debitor_text' => $transData->getInvoiceDebitorText()); } else { // is process as lastschrift, fill with empty data $invoice = array('number' => $transData->getInvoiceNumber(), 'bank_holder' => '', 'bank_account_number' => '', 'bank_code' => '', 'bank_name' => '', 'reason' => '', 'date' => '', 'due_date' => '', 'debitor_text' => Mage::helper('pnsofortueberweisung')->__('your invoice amount will automatically be deducted from your your bank account.')); } $order->getPayment()->setAdditionalInformation("sofortrechnung_invoice_url", $transData->getInvoiceUrl()); $order->getPayment()->setAdditionalInformation('sofort_invoice', serialize($invoice)); // rechnung } elseif ($transData->isSofortrechnung()) { return; // lastschrift } elseif ($transData->isLastschrift()) { $newOrderStatus = Mage::getStoreConfig('payment/sofort/lastschriftsofort_order_status'); $notifyCustomer = true; // sofortueberweisung } else { $newOrderStatus = Mage::getStoreConfig('payment/sofort/pnsofort_order_status'); $notifyCustomer = true; } $payment->setStatus(Paymentnetwork_Pnsofortueberweisung_Model_Pnsofortueberweisung::STATUS_SUCCESS); $payment->setStatusDescription(Mage::helper('pnsofortueberweisung')->__('Payment was successful.', $transaction)); $order->setPayment($payment); if ($order->getPayment()->canCapture() && $order->canInvoice()) { $payment->setTransactionId($transaction)->setIsTransactionClosed(0)->registerCaptureNotification($amount); } elseif (method_exists($payment, 'addTransaction')) { //transaction overview in magento > 1.5 $payment->setTransactionId($transaction)->setIsTransactionClosed(0)->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE); } $order->setPayment($payment); // if status is already closed or completed dont change it if ($order->getStatus() == 'closed' || $order->getStatus() == 'complete') { $order->addStatusHistoryComment(Mage::helper('pnsofortueberweisung')->__('Payment was successful.', $transaction))->setIsCustomerNotified($notifyCustomer); $order->setIsVisibleOnFront(true); } else { if ($newOrderStatus == 'unchanged') { $order->addStatusHistoryComment(Mage::helper('pnsofortueberweisung')->__('Payment was successful.', $transaction))->setIsCustomerNotified($notifyCustomer); $order->setIsVisibleOnFront(true); } else { $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING); $order->addStatusHistoryComment(Mage::helper('pnsofortueberweisung')->__('Payment was successful.', $transaction), $newOrderStatus)->setIsCustomerNotified($notifyCustomer); $order->setIsVisibleOnFront(true); } } // FIX BUG to send multible mails to customer if ($notifyCustomer && !$order->getEmailSent()) { $order->setEmailSent(true); $order->save(); $order->sendNewOrderEmail(); } $order->save(); }