public void RecurringTransactionRepository_Update()
        {
            var dbHelper = new DbHelper(new SQLitePlatformWinRT(), new TestDatabasePath());

            using (var db = dbHelper.GetSqlConnection())
            {
                db.DeleteAll<RecurringTransaction>();
            }

            var repository = new RecurringTransactionRepository(new RecurringTransactionDataAccess(dbHelper));

            var account = new Account
            {
                Name = "TestAccount"
            };

            var transaction = new RecurringTransaction
            {
                ChargedAccount = account,
                Amount = 20,
                AmountWithoutExchange = 20
            };

            repository.Save(transaction);
            Assert.AreEqual(1, repository.Data.Count);
            Assert.AreSame(transaction, repository.Data[0]);

            transaction.Amount = 789;

            repository.Save(transaction);

            Assert.AreEqual(1, repository.Data.Count);
            Assert.AreEqual(789, repository.Data[0].Amount);
        }
コード例 #2
0
        /// <summary>
        ///     Creates an Financial Transaction based on the Recurring transaction.
        /// </summary>
        /// <param name="recurringTransaction">The Recurring Transaction the new Transaction shall be based on.</param>
        /// <returns>The new created Financial Transaction</returns>
        public static FinancialTransaction GetFinancialTransactionFromRecurring(
            RecurringTransaction recurringTransaction)
        {
            var date = DateTime.Today;

            //If the transaction is monthly we want it on the same day of month again.
            if (recurringTransaction.Recurrence == (int) TransactionRecurrence.Monthly)
            {
                date = DateTime.Today.AddDays(recurringTransaction.StartDate.Day - DateTime.Today.Day);
            }

            return new FinancialTransaction
            {
                ChargedAccount = recurringTransaction.ChargedAccount,
                ChargedAccountId = recurringTransaction.ChargedAccountId,
                TargetAccount = recurringTransaction.TargetAccount,
                TargetAccountId = recurringTransaction.TargetAccountId,
                Date = date,
                IsRecurring = true,
                Amount = recurringTransaction.Amount,
                Category = recurringTransaction.Category,
                CategoryId = recurringTransaction.CategoryId,
                Type = recurringTransaction.Type,
                ReccuringTransactionId = recurringTransaction.Id,
                RecurringTransaction = recurringTransaction,
                Note = recurringTransaction.Note
            };
        }
コード例 #3
0
        /// <summary>
        ///     Checks if the recurring Transaction is up for a repetition based on the passed Financial Transaction
        /// </summary>
        /// <param name="recTrans">RecurringTransaction to check.</param>
        /// <param name="relTransaction">Reference Transaction</param>
        /// <returns>True or False if the transaction have to be repeated.</returns>
        public static bool CheckIfRepeatable(RecurringTransaction recTrans, FinancialTransaction relTransaction)
        {
            switch (recTrans.Recurrence)
            {
                case (int) TransactionRecurrence.Daily:
                    return DateTime.Today.Date != relTransaction.Date.Date;

                case (int) TransactionRecurrence.DailyWithoutWeekend:
                    return DateTime.Today.Date != relTransaction.Date.Date
                           && DateTime.Today.DayOfWeek != DayOfWeek.Saturday
                           && DateTime.Today.DayOfWeek != DayOfWeek.Sunday;

                case (int) TransactionRecurrence.Weekly:
                    var days = DateTime.Now - relTransaction.Date;
                    return days.Days >= 7;

                case (int) TransactionRecurrence.Monthly:
                    return DateTime.Now.Month != relTransaction.Date.Month;

                case (int) TransactionRecurrence.Yearly:
                    return DateTime.Now.Year != relTransaction.Date.Year
                           && DateTime.Now.Month == relTransaction.Date.Month;

                default:
                    return false;
            }
        }
コード例 #4
0
        public void RecurringTransactionRepository_Delete()
        {
            var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock();
            var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock);

            var account = new Account
            {
                Name = "TestAccount"
            };

            var transaction = new RecurringTransaction
            {
                ChargedAccount = account,
                Amount = 20,
                AmountWithoutExchange = 20
            };

            repository.Save(transaction);
            Assert.AreSame(transaction, recurringTransactionDataAccessMock.RecurringTransactionTestList[0]);

            repository.Delete(transaction);

            Assert.IsFalse(recurringTransactionDataAccessMock.RecurringTransactionTestList.Any());
            Assert.IsFalse(repository.Data.Any());
        }
コード例 #5
0
        /// <summary>
        ///     Checks if the recurring Transaction is up for a repetition based on the passed Financial Transaction
        /// </summary>
        /// <param name="recTrans">RecurringTransaction to check.</param>
        /// <param name="relTransaction">Reference Transaction</param>
        /// <returns>True or False if the transaction have to be repeated.</returns>
        public static bool CheckIfRepeatable(RecurringTransaction recTrans, FinancialTransaction relTransaction)
        {
            if (!relTransaction.IsCleared) return false;

            switch (recTrans.Recurrence)
            {
                case (int) TransactionRecurrence.Daily:
                    return DateTime.Today.Date != relTransaction.Date.Date;

                case (int) TransactionRecurrence.DailyWithoutWeekend:
                    return DateTime.Today.Date != relTransaction.Date.Date
                           && DateTime.Today.DayOfWeek != DayOfWeek.Saturday
                           && DateTime.Today.DayOfWeek != DayOfWeek.Sunday;

                case (int) TransactionRecurrence.Weekly:
                    var daysWeekly = DateTime.Now - relTransaction.Date;
                    return daysWeekly.Days >= 7;

                case (int) TransactionRecurrence.Biweekly:
                    var daysBiweekly = DateTime.Now - relTransaction.Date;
                    return daysBiweekly.Days >= 14;

                case (int) TransactionRecurrence.Monthly:
                    return DateTime.Now.Month != relTransaction.Date.Month;

                case (int) TransactionRecurrence.Yearly:
                    return (DateTime.Now.Year != relTransaction.Date.Year
                           && DateTime.Now.Month >= relTransaction.Date.Month)
                           || (DateTime.Now.Year - relTransaction.Date.Year) > 1;

                default:
                    return false;
            }
        }
コード例 #6
0
        public void RecurringTransactionRepository_AddMultipleToCache()
        {
            var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock();
            var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock);

            var account = new Account
            {
                Name = "TestAccount"
            };

            var transaction = new RecurringTransaction
            {
                ChargedAccount = account,
                Amount = 20,
                AmountWithoutExchange = 20
            };

            var secondTransaction = new RecurringTransaction
            {
                ChargedAccount = account,
                Amount = 60,
                AmountWithoutExchange = 60
            };

            repository.Save(transaction);
            repository.Save(secondTransaction);

            Assert.AreEqual(2, repository.Data.Count);
            Assert.AreSame(transaction, repository.Data[0]);
            Assert.AreSame(secondTransaction, repository.Data[1]);
        }
コード例 #7
0
        public void RecurringTransactionDataAccess_CrudRecurringTransaction()
        {
            var recurringTransactionDataAccess =
                new RecurringTransactionDataAccess(new SqliteConnectionCreator(new WindowsSqliteConnectionFactory()));

            const double firstAmount = 100.70;
            const double secondAmount = 80.45;

            var transaction = new RecurringTransaction
            {
                ChargedAccountId = 7,
                Amount = firstAmount,
                StartDate = DateTime.Today,
                EndDate = DateTime.Now.AddDays(7),
                Note = "this is a note!!!"
            };

            recurringTransactionDataAccess.SaveItem(transaction);


            var list = recurringTransactionDataAccess.LoadList();

            Assert.Equal(1, list.Count);
            Assert.Equal(firstAmount, list.First().Amount);

            transaction.Amount = secondAmount;

            recurringTransactionDataAccess.SaveItem(transaction);

            recurringTransactionDataAccess.LoadList();
            list = recurringTransactionDataAccess.LoadList();

            Assert.Equal(1, list.Count);
            Assert.Equal(secondAmount, list.First().Amount);

            recurringTransactionDataAccess.DeleteItem(transaction);

            recurringTransactionDataAccess.LoadList();
            list = recurringTransactionDataAccess.LoadList();
            Assert.False(list.Any());
        }
コード例 #8
0
        public void RecurringTransactionDataAccess_CrudRecurringTransaction()
        {
            var recurringTransactionDataAccess = new RecurringTransactionDataAccess(new DbHelper(new SQLitePlatformWinRT(), new TestDatabasePath()));

            const double firstAmount = 100.70;
            const double secondAmount = 80.45;

            var transaction = new RecurringTransaction
            {
                ChargedAccountId = 7,
                Amount = firstAmount,
                StartDate = DateTime.Today,
                EndDate = DateTime.Now.AddDays(7),
                Note = "this is a note!!!"
            };

            recurringTransactionDataAccess.Save(transaction);

            var list = recurringTransactionDataAccess.LoadList();

            Assert.AreEqual(1, list.Count);
            Assert.AreEqual(firstAmount, list.First().Amount);

            transaction.Amount = secondAmount;

            recurringTransactionDataAccess.Save(transaction);

            recurringTransactionDataAccess.LoadList();
            list = recurringTransactionDataAccess.LoadList();

            Assert.AreEqual(1, list.Count);
            Assert.AreEqual(secondAmount, list.First().Amount);

            recurringTransactionDataAccess.Delete(transaction);

            recurringTransactionDataAccess.LoadList();
            list = recurringTransactionDataAccess.LoadList();
            Assert.IsFalse(list.Any());
        }
コード例 #9
0
        public void CheckIfRepeatable_DivRecurrences_ValidatedRecurrence(TransactionRecurrence recurrence,
            int amountOfDaysBack)
        {
            var account = new Account {Id = 2};

            var recTrans = new RecurringTransaction
            {
                Id = 4,
                Recurrence = (int) recurrence,
                StartDate = new DateTime(2015, 08, 25),
                ChargedAccountId = 2,
                ChargedAccount = account,
                Amount = 105
            };

            RecurringTransactionHelper.CheckIfRepeatable(recTrans,
                new FinancialTransaction {Date = DateTime.Today.AddDays(-amountOfDaysBack)});
        }
コード例 #10
0
        public void CheckIfRepeatable_UnclearedTransaction_ReturnFalse()
        {
            var account = new Account {Id = 2};

            var recTrans = new RecurringTransaction
            {
                Id = 4,
                Recurrence = (int) TransactionRecurrence.Weekly,
                StartDate = new DateTime(2015, 08, 25),
                ChargedAccountId = 2,
                ChargedAccount = account,
                Amount = 105
            };

            RecurringTransactionHelper.CheckIfRepeatable(recTrans,
                new FinancialTransaction {Date = DateTime.Today.AddDays(11)}).ShouldBeFalse();
        }
コード例 #11
0
        private static void SaveTransaction(RecurringTransaction recurringTransaction)
        {
            try
            {
                var date = DateTime.Now;

                if (recurringTransaction.Recurrence == (int) TransactionRecurrence.Monthly)
                {
                    date = DateTime.Now.AddDays(recurringTransaction.StartDate.Day - DateTime.Today.Day);
                }

                var newTransaction = new FinancialTransaction
                {
                    ChargedAccount = recurringTransaction.ChargedAccount,
                    TargetAccount = recurringTransaction.TargetAccount,
                    Date = date,
                    IsRecurring = true,
                    Amount = recurringTransaction.Amount,
                    AmountWithoutExchange = recurringTransaction.AmountWithoutExchange,
                    Currency = recurringTransaction.Currency,
                    CategoryId = recurringTransaction.CategoryId,
                    Type = recurringTransaction.Type,
                    ReccuringTransactionId = recurringTransaction.Id,
                    Note = recurringTransaction.Note
                };

                transactionRepository.Save(newTransaction);
            }
            catch (Exception ex)
            {
                InsightHelper.Report(ex);
            }
        }
コード例 #12
0
        public void TransactionRepository_SaveWithouthAccount()
        {
            try
            {
                var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock();
                var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock);

                var transaction = new RecurringTransaction
                {
                    Amount = 20,
                    AmountWithoutExchange = 20
                };

                repository.Save(transaction);
            }
            catch (InvalidDataException)
            {
                return;
            }
            catch (Exception)
            {
                Assert.Fail("wrong exception.");
            }
            Assert.Fail("No excpetion thrown");
        }
コード例 #13
0
        public void RemoveRecurringForTransactions(RecurringTransaction recTrans)
        {
            try
            {
                var relatedTrans = transactionRepository
                    .Data
                    .Where(x => x.IsRecurring && x.ReccuringTransactionId == recTrans.Id);

                foreach (var transaction in relatedTrans)
                {
                    transaction.IsRecurring = false;
                    transaction.ReccuringTransactionId = 0;
                    transactionRepository.Save(transaction);
                }
            }
            catch (Exception ex)
            {
                InsightHelper.Report(ex);
            }
        }
コード例 #14
0
 public static void Delete(RecurringTransaction recTransaction)
 {
     RecurringTransactionData.Delete(recTransaction);
     RemoveRecurringForTransactions(recTransaction);
 }
コード例 #15
0
        public void GetFinancialTransactionFromRecurring_RecurringTransaction_CorrectMappedFinancialTrans(
            TransactionRecurrence recurrence)
        {
            var account = new Account {Id = 2};

            var recTrans = new RecurringTransaction
            {
                Id = 4,
                Recurrence = (int) recurrence,
                StartDate = new DateTime(2015, 08, 25),
                ChargedAccountId = 2,
                ChargedAccount = account,
                Amount = 105
            };

            var result = RecurringTransactionHelper.GetFinancialTransactionFromRecurring(recTrans);

            result.ChargedAccount.ShouldBe(account);
            result.ChargedAccountId.ShouldBe(account.Id);
            result.Amount.ShouldBe(105);
            result.Date.ShouldBe(DateTime.Today);
        }
コード例 #16
0
        public void GetFinancialTransactionFromRecurring_MonthlyTransaction_CorrectMappedFinancialTrans()
        {
            var account = new Account {Id = 2};
            var dayOfMonth = 26;

            var recTrans = new RecurringTransaction
            {
                Id = 4,
                Recurrence = (int) TransactionRecurrence.Monthly,
                StartDate = new DateTime(2015, 08, dayOfMonth),
                ChargedAccountId = 2,
                ChargedAccount = account,
                Amount = 105
            };

            var result = RecurringTransactionHelper.GetFinancialTransactionFromRecurring(recTrans);

            result.ChargedAccount.ShouldBe(account);
            result.ChargedAccountId.ShouldBe(account.Id);
            result.Amount.ShouldBe(105);
            result.Date.ShouldBe(new DateTime(DateTime.Today.Year, DateTime.Today.Month, dayOfMonth));
        }
コード例 #17
0
        public void RecurringTransactionRepository_Save()
        {
            var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock();
            var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock);

            var account = new Account
            {
                Name = "TestAccount"
            };

            var transaction = new RecurringTransaction
            {
                ChargedAccount = account,
                Amount = 20,
                AmountWithoutExchange = 20
            };

            repository.Save(transaction);

            Assert.IsTrue(transaction == recurringTransactionDataAccessMock.RecurringTransactionTestList[0]);
            Assert.IsTrue(account == recurringTransactionDataAccessMock.RecurringTransactionTestList[0].ChargedAccount);
        }