//TODO: duplicate check
 private void SetAmount(TRANSACTIONSTABLE t, decimal tranAmount, string amountCurrency, string defaultCurrency)
 {
     t.conversionRateNew = _currencyExchange.GetRate(defaultCurrency, amountCurrency);
     //Amount is stored in base currency, regardless of transaction currency
     t.amount = (long)decimal.Round(tranAmount / t.conversionRateNew * TransactionAmountFactor);
     t.transactionCurrency = amountCurrency;
 }
        private void ImportTransactions(IDbConnection connection, Database database, BluecoinDatabase bluecoinDatabase)
        {
            foreach (var transaction in database.Transactions)
            {
                if (transaction.Type == TransactionType.Adjustment)
                {
                    var item = new ITEMTABLE {
                        itemTableID = connection.NextID <ITEMTABLE>(), itemName = transaction.FromAccount.Name, MmmTransaction = transaction
                    };
                    connection.Insert(item);

                    var tran = new TRANSACTIONSTABLE
                    {
                        itemID             = item.itemTableID,
                        transactionTypeID  = bluecoinDatabase.TransactionTypes.NewAccount,
                        MmmTransaction     = transaction,
                        categoryID         = bluecoinDatabase.SpecialCategories.NewAccountCatID,
                        accountID          = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        accountPairID      = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        notes              = transaction.Notes,
                        status             = 2, //TODO: meaning is not clear
                        deletedTransaction = 6, //TODO: meaning is not clear
                        date             = transaction.Date,
                        accountReference = 3,
                    };
                    SetAmount(tran, transaction.FromAmount, transaction.FromAccount.CurrencyCode, bluecoinDatabase.DefaultCurrency);

                    tran.transactionsTableID = tran.uidPairID = connection.NextID <TRANSACTIONSTABLE>();
                    connection.Insert(tran);
                }
                if (transaction.Type == TransactionType.Transfer)
                {
                    var item = new ITEMTABLE {
                        itemName = transaction.FromAccount.Name, MmmTransaction = transaction
                    };
                    var tran = new TRANSACTIONSTABLE
                    {
                        transactionTypeID  = bluecoinDatabase.TransactionTypes.Transfer,
                        MmmTransaction     = transaction,
                        categoryID         = bluecoinDatabase.SpecialCategories.TransferCatID,
                        accountID          = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        accountPairID      = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.ToAccount).accountsTableID,
                        notes              = transaction.Notes,
                        status             = 0, //TODO: meaning is not clear
                        deletedTransaction = 6, //TODO: meaning is not clear
                        date             = transaction.Date,
                        accountReference = 2    //TODO
                    };
                    SetAmount(tran, -transaction.FromAmount, transaction.FromAccount.CurrencyCode, bluecoinDatabase.DefaultCurrency);

                    tran.itemID = item.itemTableID = connection.NextID <ITEMTABLE>();
                    connection.Insert(item);
                    tran.transactionsTableID = tran.transferGroupID = connection.NextID <TRANSACTIONSTABLE>();
                    connection.Insert(tran);

                    var tran2 = new TRANSACTIONSTABLE
                    {
                        itemID             = item.itemTableID,
                        transactionTypeID  = bluecoinDatabase.TransactionTypes.Transfer,
                        MmmTransaction     = transaction,
                        categoryID         = bluecoinDatabase.SpecialCategories.TransferCatID,
                        accountID          = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.ToAccount).accountsTableID,
                        accountPairID      = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        notes              = transaction.Notes,
                        status             = 0, //TODO: meaning is not clear
                        deletedTransaction = 6, //TODO: meaning is not clear
                        uidPairID          = tran.transactionsTableID,
                        transferGroupID    = tran.transactionsTableID,
                        date             = transaction.Date,
                        accountReference = 2 //TODO
                    };
                    SetAmount(tran2, transaction.ToAmount, transaction.ToAccount.CurrencyCode, bluecoinDatabase.DefaultCurrency);
                    tran2.transactionsTableID = tran.uidPairID = connection.NextID <TRANSACTIONSTABLE>();
                    connection.Insert(tran2);

                    connection.Update <TRANSACTIONSTABLE>(tran);
                }

                if (transaction.Type == TransactionType.Income)
                {
                    var item = new ITEMTABLE {
                        itemName = transaction.Notes, MmmTransaction = transaction
                    };
                    var tran = new TRANSACTIONSTABLE
                    {
                        transactionTypeID  = bluecoinDatabase.TransactionTypes.Income,
                        MmmTransaction     = transaction,
                        categoryID         = bluecoinDatabase.ChildCategories.Single(c => c.MmmCategory == transaction.Category).categoryTableID,
                        accountID          = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.ToAccount).accountsTableID,
                        accountPairID      = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.ToAccount).accountsTableID,
                        notes              = transaction.Notes,
                        status             = 0, //TODO: meaning is not clear
                        deletedTransaction = 6, //TODO: meaning is not clear
                        date             = transaction.Date,
                        accountReference = 1    //TODO
                    };
                    SetAmount(tran, transaction.ToAmount, transaction.ToAccount.CurrencyCode, bluecoinDatabase.DefaultCurrency);

                    tran.itemID = item.itemTableID = connection.NextID <ITEMTABLE>();
                    connection.Insert(item);
                    tran.transactionsTableID = tran.uidPairID = connection.NextID <TRANSACTIONSTABLE>();
                    connection.Insert(tran);
                }

                if (transaction.Type == TransactionType.Expense)
                {
                    var item = new ITEMTABLE {
                        itemName = transaction.Notes, MmmTransaction = transaction
                    };
                    var tran = new TRANSACTIONSTABLE
                    {
                        transactionTypeID  = bluecoinDatabase.TransactionTypes.Expense,
                        MmmTransaction     = transaction,
                        categoryID         = bluecoinDatabase.ChildCategories.Single(c => c.MmmCategory == transaction.Category).categoryTableID,
                        accountID          = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        accountPairID      = bluecoinDatabase.Accounts.Single(a => a.MmmAccount == transaction.FromAccount).accountsTableID,
                        notes              = transaction.Notes,
                        status             = 0, //TODO: meaning is not clear
                        deletedTransaction = 6, //TODO: meaning is not clear
                        date             = transaction.Date,
                        accountReference = 1    //TODO
                    };
                    SetAmount(tran, -transaction.FromAmount, transaction.FromAccount.CurrencyCode, bluecoinDatabase.DefaultCurrency);

                    tran.itemID = item.itemTableID = connection.NextID <ITEMTABLE>();
                    connection.Insert(item);
                    tran.transactionsTableID = tran.uidPairID = connection.NextID <TRANSACTIONSTABLE>();
                    connection.Insert(tran);
                }
            }
        }