/**
  * Creates a Finished Transaction.
  * 
  * @param $badgerDb object The DB object.
  * @param $account object The Account object who created this Transaction.
  * @param $data mixed An associative array with the values out of the DB OR the id of the Transaction.
  * @param $title string The title of the Transaction.
  * @param $amount object The Amount object with the amount of this Transaction.
  * @param $description string The description of the Transaction.
  * @param $valutaDate object The Date object with the valuta date of the Transaction.
  * @param $transactionPartner string The transaction partner of the Transaction
  * @param $outsideCapital boolean The origin of the Transaction.
  * @param $type string The type of the Transaction.
  */
 function __construct(&$badgerDb, &$account, $data, $title = null, $amount = null, $description = null, $valutaDate = null, $transactionPartner = null, $category = null, $outsideCapital = null, $exceptional = null, $periodical = null, $sourcePlannedTransaction = null, $type = 'FinishedTransaction', $transferalTransaction = null)
 {
     $this->badgerDb = $badgerDb;
     $this->account = $account;
     if (is_array($data)) {
         $this->id = $data['finished_transaction_id'];
         $this->title = $data['title'];
         $this->description = $data['description'];
         $this->amount = new Amount($data['amount']);
         $this->outsideCapital = $data['outside_capital'];
         $this->transactionPartner = $data['transaction_partner'];
         if ($data['category_id']) {
             $cm = new CategoryManager($badgerDb);
             $this->category = $cm->getCategoryById($data['category_id']);
         }
         if ($data['valuta_date']) {
             $this->valutaDate = new Date($data['valuta_date']);
         }
         $this->exceptional = $data['exceptional'];
         $this->periodical = $data['periodical'];
         $this->balance = new Amount($data['balance']);
         $this->transferalSource = $data['transferal_source'];
         $planned = false;
         if ($data['planned_transaction_id']) {
             try {
                 $this->sourcePlannedTransaction = $account->getPlannedTransactionById($data['planned_transaction_id']);
                 $planned = true;
             } catch (BadgerException $ex) {
                 $this->sourcePlannedTransaction = null;
             }
         }
         $transferal = false;
         if ($data['transferal_transaction_id']) {
             if (!is_null($title) && $data['transferal_transaction_id'] == $title->getId()) {
                 $this->transferalTransaction = $title;
                 $transferl = true;
             } else {
                 $accountManager = new AccountManager($badgerDb);
                 try {
                     $transferalAccount = $accountManager->getAccountByFinishedTransactionId($data['transferal_transaction_id']);
                     $this->transferalTransaction = $transferalAccount->getFinishedTransactionById($data['transferal_transaction_id'], $this);
                     $transferal = true;
                 } catch (BadgerException $ex) {
                     $this->transferalTransaction = null;
                 }
             }
         }
         $this->type = ($planned ? 'Planned' : 'Finished') . ($transferal ? 'Transferal' : '') . 'Transaction';
     } else {
         $this->id = $data;
         $this->title = $title;
         $this->description = $description;
         $this->valutaDate = $valutaDate;
         $this->amount = $amount;
         $this->outsideCapital = $outsideCapital;
         $this->transactionPartner = $transactionPartner;
         $this->category = $category;
         $this->exceptional = $exceptional;
         $this->periodical = $periodical;
         $this->sourcePlannedTransaction = $sourcePlannedTransaction;
         $this->balance = null;
         $this->type = $type;
         $this->transferalTransaction = $transferalTransaction;
         $this->transferalSource = null;
     }
     //if database output given
 }