/**
  * 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();
 }