Exemple #1
0
        public void CreateMany(IEnumerable <TransactionRelationship> transactionRelationships)
        {
            var entitiesByTransactionRelationship = new Dictionary <TransactionRelationship, Entities.TransactionRelationship>();

            foreach (TransactionRelationship transactionRelationship in transactionRelationships)
            {
                var transactionRelationshipEntity = new Entities.TransactionRelationship
                {
                    SourceTransactionId      = transactionRelationship.SourceTransaction.TransactionId,
                    DestinationTransactionId = transactionRelationship.DestinationTransaction.TransactionId,
                    Type = transactionRelationship.Type
                };

                m_dbContext.TransactionRelationships.Add(transactionRelationshipEntity);
                entitiesByTransactionRelationship.Add(transactionRelationship, transactionRelationshipEntity);
            }

            m_dbContext.SaveChanges();

            foreach (KeyValuePair <TransactionRelationship, Entities.TransactionRelationship> entityByTransactionRelationship in entitiesByTransactionRelationship)
            {
                entityByTransactionRelationship.Key.TransactionRelationshipId =
                    entityByTransactionRelationship.Value.TransactionRelationshipId;
            }
        }
        private static XElement ElementFromTransactionRelationship(Entities.TransactionRelationship transactionRelationship)
        {
            var element = new XElement(XName.Get("TransactionRelationship"),
                                       new XAttribute(XName.Get("destination"), transactionRelationship.DestinationTransactionId),
                                       new XAttribute(XName.Get("source"), transactionRelationship.SourceTransactionId),
                                       new XAttribute(XName.Get("type"), transactionRelationship.Type.ToString())
                                       );

            return(element);
        }
Exemple #3
0
        public void Create(TransactionRelationship transactionRelationship)
        {
            var transactionRelationshipEntity = new Entities.TransactionRelationship
            {
                SourceTransactionId      = transactionRelationship.SourceTransaction.TransactionId,
                DestinationTransactionId = transactionRelationship.DestinationTransaction.TransactionId,
                Type = transactionRelationship.Type
            };

            m_dbContext.TransactionRelationships.Add(transactionRelationshipEntity);
            m_dbContext.SaveChanges();

            transactionRelationship.TransactionRelationshipId = transactionRelationshipEntity.TransactionRelationshipId;
        }
        private static Entities.TransactionRelationship TransactionRelationshipFromElement(
            XElement element,
            Dictionary <int, Entities.Transaction> transactionsById)
        {
            string destinationTransactionIdText = GetRequiredAttribute(element, "destination").Value;
            int    destinationTransactionId     = Int32.Parse(destinationTransactionIdText);
            string sourceTransactionIdText      = GetRequiredAttribute(element, "source").Value;
            int    sourceTransactionId          = Int32.Parse(sourceTransactionIdText);
            string type = GetRequiredAttribute(element, "type").Value;

            var transactionRelationship = new Entities.TransactionRelationship
            {
                DestinationTransaction = transactionsById[destinationTransactionId],
                SourceTransaction      = transactionsById[sourceTransactionId],
                Type = (TransactionRelationshipType)Enum.Parse(typeof(TransactionRelationshipType), type)
            };

            return(transactionRelationship);
        }
        public void TestGetPendingCreditCardTransactionsNoResults()
        {
            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory = new CurrencyFactory();
                Entities.Currency usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account rentPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.RentPrepayment, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account creditCardAccountEntity =
                    accountFactory.Create(AccountPrefab.CreditCard, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, creditCardAccountEntity);

                var checkingToRentPrepaymentRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = rentPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };
                var rentPrepaymentToExpenseRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = rentPrepaymentAccountEntity,
                    DestinationAccount = rentExpenseAccountEntity,
                    Type = AccountRelationshipType.PrepaymentToExpense
                };

                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToRentPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(rentPrepaymentToExpenseRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var transactionsToAdd = new Entities.Transaction[4]
                {
                    new Entities.Transaction
                    {
                        CreditAccount = incomeAccountEntity,
                        DebitAccount  = checkingAccountEntity,
                        Amount        = 100m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 1)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = rentPrepaymentAccountEntity,
                        Amount        = 50m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 2)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = creditCardAccountEntity,
                        DebitAccount  = rentExpenseAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 3)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = rentPrepaymentAccountEntity,
                        DebitAccount  = creditCardAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 4)
                    }
                };

                sqliteMemoryWrapper.DbContext.Transactions.AddRange(transactionsToAdd);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var expenseToPaymentRelationship = new Entities.TransactionRelationship
                {
                    SourceTransaction      = transactionsToAdd[2],
                    DestinationTransaction = transactionsToAdd[3],
                    Type = TransactionRelationshipType.CreditCardPayment
                };

                sqliteMemoryWrapper.DbContext.TransactionRelationships.Add(expenseToPaymentRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                ILoggerFactory     loggerFactory      = new LoggerFactory();
                TransactionService transactionService = new TransactionService(loggerFactory, sqliteMemoryWrapper.DbContext);

                List <Payment> pendingPayments =
                    transactionService.GetPendingCreditCardPayments(creditCardAccountEntity.AccountId).ToList();

                Assert.AreEqual(0, pendingPayments.Count);
            }
        }
Exemple #6
0
        public void TestCreateTransactionRelationshipInDbContext()
        {
            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory = new CurrencyFactory();
                Entities.Currency usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account rentPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.RentPrepayment, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account creditCardAccountEntity =
                    accountFactory.Create(AccountPrefab.CreditCard, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, creditCardAccountEntity);

                var transactionsToAdd = new Entities.Transaction[4]
                {
                    new Entities.Transaction
                    {
                        CreditAccount = incomeAccountEntity,
                        DebitAccount  = checkingAccountEntity,
                        Amount        = 109m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 1)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = rentPrepaymentAccountEntity,
                        Amount        = 50m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 2)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = creditCardAccountEntity,
                        DebitAccount  = rentExpenseAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 3)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = rentPrepaymentAccountEntity,
                        DebitAccount  = creditCardAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 30, 4)
                    }
                };

                sqliteMemoryWrapper.DbContext.Transactions.AddRange(transactionsToAdd);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var expenseToPaymentRelationship = new Entities.TransactionRelationship
                {
                    SourceTransaction      = transactionsToAdd[2],
                    DestinationTransaction = transactionsToAdd[2],
                    Type = TransactionRelationshipType.CreditCardPayment
                };

                sqliteMemoryWrapper.DbContext.TransactionRelationships.Add(expenseToPaymentRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                List <Account>                 accounts                 = sqliteMemoryWrapper.DbContext.Accounts.ToList();
                List <Currency>                currencies               = sqliteMemoryWrapper.DbContext.Currencies.ToList();
                List <Transaction>             transactions             = sqliteMemoryWrapper.DbContext.Transactions.ToList();
                List <TransactionRelationship> transactionRelationships = sqliteMemoryWrapper.DbContext.TransactionRelationships.ToList();

                Assert.AreEqual(5, accounts.Count);
                Assert.AreEqual(1, currencies.Count);
                Assert.AreEqual(4, transactions.Count);
                Assert.AreEqual(1, transactionRelationships.Count);
                Assert.AreEqual(expenseToPaymentRelationship.SourceTransactionId,
                                transactionRelationships[0].SourceTransactionId);
                Assert.AreEqual(expenseToPaymentRelationship.DestinationTransactionId,
                                transactionRelationships[0].DestinationTransactionId);
                Assert.AreEqual(expenseToPaymentRelationship.Type, transactionRelationships[0].Type);
            }
        }
Exemple #7
0
        public void TestCreateManyTransactionRelationships()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();

                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account rentPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.RentPrepayment, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account creditCardAccountEntity =
                    accountFactory.Create(AccountPrefab.CreditCard, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, creditCardAccountEntity);

                var transactionEntities = new Entities.Transaction[]
                {
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = rentPrepaymentAccountEntity,
                        Amount        = 60m,
                        At            = new DateTime(2018, 1, 1, 8, 31, 0)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = creditCardAccountEntity,
                        DebitAccount  = rentExpenseAccountEntity,
                        Amount        = 10m,
                        At            = new DateTime(2018, 1, 1, 8, 32, 0)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = rentPrepaymentAccountEntity,
                        DebitAccount  = creditCardAccountEntity,
                        Amount        = 10m,
                        At            = new DateTime(2018, 1, 1, 8, 33, 0)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = creditCardAccountEntity,
                        DebitAccount  = rentExpenseAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 34, 0)
                    },
                    new Entities.Transaction
                    {
                        CreditAccount = rentPrepaymentAccountEntity,
                        DebitAccount  = creditCardAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1, 8, 35, 0)
                    }
                };

                sqliteMemoryWrapper.DbContext.Transactions.AddRange(transactionEntities);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var checkingToRentPrepaymentRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = rentPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };
                var checkingToGroceriesPrepaymentRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = rentPrepaymentAccountEntity,
                    DestinationAccount = rentExpenseAccountEntity,
                    Type = AccountRelationshipType.PrepaymentToExpense
                };

                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToRentPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToGroceriesPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var transactionService = new TransactionService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var transactionRelationshipService = new TransactionRelationshipService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );

                Transaction creditCardToExpenseTransaction1    = transactionService.Get(transactionEntities[1].TransactionId);
                Transaction prepaymentToCreditCardTransaction1 = transactionService.Get(transactionEntities[2].TransactionId);
                Transaction creditCardToExpenseTransaction2    = transactionService.Get(transactionEntities[3].TransactionId);
                Transaction prepaymentToCreditCardTransaction2 = transactionService.Get(transactionEntities[4].TransactionId);
                var         newTransactionRelationships        = new TransactionRelationship[2]
                {
                    new TransactionRelationship
                    {
                        SourceTransaction      = creditCardToExpenseTransaction1,
                        DestinationTransaction = prepaymentToCreditCardTransaction1,
                        Type = TransactionRelationshipType.CreditCardPayment
                    },
                    new TransactionRelationship
                    {
                        SourceTransaction      = creditCardToExpenseTransaction2,
                        DestinationTransaction = prepaymentToCreditCardTransaction2,
                        Type = TransactionRelationshipType.CreditCardPayment
                    }
                };
                transactionRelationshipService.CreateMany(newTransactionRelationships);

                List <Entities.TransactionRelationship> transactionRelationshipEntities =
                    sqliteMemoryWrapper.DbContext.TransactionRelationships.ToList();

                Assert.AreEqual(2, transactionRelationshipEntities.Count);
                Entities.TransactionRelationship firstAddedEntity = transactionRelationshipEntities.FirstOrDefault(tr =>
                                                                                                                   tr.SourceTransactionId == newTransactionRelationships[0].SourceTransaction.TransactionId &&
                                                                                                                   tr.DestinationTransactionId == newTransactionRelationships[0].DestinationTransaction.TransactionId &&
                                                                                                                   tr.Type == newTransactionRelationships[0].Type);
                Assert.IsNotNull(firstAddedEntity);
                Entities.TransactionRelationship secondAddedEntity = transactionRelationshipEntities.FirstOrDefault(tr =>
                                                                                                                    tr.SourceTransactionId == newTransactionRelationships[1].SourceTransaction.TransactionId &&
                                                                                                                    tr.DestinationTransactionId == newTransactionRelationships[1].DestinationTransaction.TransactionId &&
                                                                                                                    tr.Type == newTransactionRelationships[1].Type);
                Assert.IsNotNull(secondAddedEntity);
            }
        }