Exemple #1
0
        public void TestConstructor_ShouldInitializeCorrectly()
        {
            //Arrange && Act
            var categoryStatistic = new CategoryStatistic();

            //Assert
            Assert.IsNotNull(categoryStatistic);
        }
Exemple #2
0
        public void TestConstructor_PassValidParameters_ShouldInitalizeCorrectly(int categoryId)
        {
            //Arrange & Act
            var categoryStatistic = new CategoryStatistic(categoryId);

            //Assert
            Assert.IsNotNull(categoryStatistic);
        }
Exemple #3
0
        public void CategoryId_ShouldSetCorrectly(int value)
        {
            //Arrange
            var categoryStatistic = new CategoryStatistic();

            //Act
            categoryStatistic.CategoryId = value;

            //Assert
            Assert.AreEqual(value, categoryStatistic.CategoryId);
        }
Exemple #4
0
        public void Category_ShouldSetCorrectly()
        {
            //Arrange
            var fakeCategory = new Category();
            var categoryStatistic = new CategoryStatistic();

            //Act
            categoryStatistic.Category = fakeCategory;

            //Assert
            Assert.AreSame(fakeCategory, categoryStatistic.Category);
        }
        public void Users_ShouldSetCorrectly()
        {
            //Arrange
            var fakeUser          = new User();
            var categoryStatistic = new CategoryStatistic();

            //Act
            categoryStatistic.User = fakeUser;

            //Assert
            Assert.AreSame(fakeUser, categoryStatistic.User);
        }
        public async Task <CategoriesStatistics> GetStatisticsAsync(DateTime from, DateTime to, List <Category> categoriesToAnalyse)
        {
            CategoriesStatistics     statistics = new CategoriesStatistics();
            IQueryable <Transaction> transactions;

            if (categoriesToAnalyse == null || categoriesToAnalyse.Count <= 0)
            {
                transactions = DbContext.TransActions.Include(b => b.CategoryLinks).Include(b => b.Relation).Where(b => b.Date >= from && b.Date <= to && !b.Relation.OwnAccount);
            }
            else
            {
                transactions = DbContext.TransActions.Include(b => b.CategoryLinks).Include(b => b.Relation).Where(b => b.Date >= from && b.Date <= to & !b.Relation.OwnAccount && b.CategoryLinks.Where(l => categoriesToAnalyse.Where(ca => ca.ID == l.CategoryID).Count() > 0).Count() > 0);
            }

            var categories   = transactions.SelectMany(b => b.CategoryLinks).Select(l => l.Category).Distinct().AsNoTracking();
            var categorieIDs = categories.Select(b => b.ID);

            categories = DbContext.Categories.Include(b => b.MainCategory).Where(b => categorieIDs.Contains(b.ID)).AsNoTracking();
            if (await transactions.Where(b => !b.CategoryLinks.Any(c => c.CategoryID != null && c.Percentage > 0)).CountAsync() > 0)
            {
                CategoryStatistic categoryStatistic = new CategoryStatistic();
                categoryStatistic.Category = new Category()
                {
                    Name = "Niet gecategoriseerd"
                };;

                categoryStatistic.Transactions = new System.Collections.ObjectModel.ObservableCollection <Transaction>(transactions.Include(b => b.CategoryLinks).ThenInclude(b => b.Category).Include(b => b.Relation).AsNoTracking().ToList().Where(b => b.CategoryLinks.Where(c => c.Category == null && c.Percentage > 0).Count() > 0).ToList());
                categoryStatistic.Balance      = categoryStatistic.Transactions.Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == null).Sum(c => c.Percentage) / 100));
                categoryStatistic.Spendings    = categoryStatistic.Transactions.Where(b => b.Amount < 0).Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == null).Sum(c => c.Percentage) / 100));
                categoryStatistic.Income       = categoryStatistic.Transactions.Where(b => b.Amount > 0).Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == null).Sum(c => c.Percentage) / 100));
                statistics.CategoryStatistics.Add(categoryStatistic);
            }
            foreach (var category in categories)
            {
                CategoryStatistic categoryStatistic = new CategoryStatistic();
                categoryStatistic.Category     = category;
                categoryStatistic.Transactions = new System.Collections.ObjectModel.ObservableCollection <Transaction>(transactions.Include(b => b.CategoryLinks).ThenInclude(b => b.Category).Include(b => b.Relation).AsNoTracking().ToList().Where(b => b.CategoryLinks.Where(c => c.CategoryID == category.ID).Count() > 0).ToList());
                categoryStatistic.Balance      = categoryStatistic.Transactions.Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == category.ID).Sum(c => c.Percentage) / 100));
                categoryStatistic.Spendings    = categoryStatistic.Transactions.Where(b => b.Amount < 0).Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == category.ID).Sum(c => c.Percentage) / 100));
                categoryStatistic.Income       = categoryStatistic.Transactions.Where(b => b.Amount > 0).Sum(b => b.Amount * (b.CategoryLinks.Where(c => c.CategoryID == category.ID).Sum(c => c.Percentage) / 100));
                //categoryStatistic.CalculateMonthlyStatistics();
                statistics.CategoryStatistics.Add(categoryStatistic);
            }
            statistics.UsedTransactions = await transactions.AsNoTracking().ToListAsync();

            return(statistics);
        }
        // CONSTRUCTORS
        private UnitOfWork()
        {
            dataBaseContext = new DataBaseContext();

            authorRepositories     = null;
            abonnementRepository   = null;
            bookRepository         = null;
            categoryRepository     = null;
            genreRepository        = null;
            publishHouseRepository = null;
            readerRepository       = null;

            abonnementStatistic      = null;
            authorStatistic          = null;
            bookStatistic            = null;
            categoryStatistic        = null;
            genreStatistic           = null;
            publishingHouseStatistic = null;
            readerStatistic          = null;
        }
Exemple #8
0
        public async Task GetCategoryStatisticByDateRangeTest()
        {
            var category1 = CategoryData.CreateCategory(Guid.NewGuid(), "Products", "Orange", Enums.CategoryType.Expenditure);
            var category2 = CategoryData.CreateCategory(Guid.NewGuid(), "Products", "Cheese", Enums.CategoryType.Expenditure);
            var startDate = new DateTime(2018, 1, 1);
            var endDate   = new DateTime(2018, 1, 2);

            var transaction0 = TransactionData.CreateTransaction(Guid.NewGuid(), startDate, 200, category1);
            var transaction1 = TransactionData.CreateTransaction(Guid.NewGuid(), endDate, 100, category2);
            var transaction2 = TransactionData.CreateTransaction(Guid.NewGuid(), new DateTime(2017, 1, 1));
            var transaction3 = TransactionData.CreateTransaction(Guid.NewGuid(), new DateTime(2019, 1, 1));

            await _transactionRepository.CreateAsync(transaction0);

            await _transactionRepository.CreateAsync(transaction1);

            await _transactionRepository.CreateAsync(transaction2);

            await _transactionRepository.CreateAsync(transaction3);

            var query = new CategoryStatisticQuery(
                new DateRangeQuery(new DateQuery(startDate), new DateQuery(endDate)),
                Enums.CategoryType.Expenditure);

            var statistic = await _statisticService.GetCategoryStatisticAsync(query);

            var expected = new CategoryStatistic(new[]
            {
                new CategoryStatisticItem(category1, 200),
                new CategoryStatisticItem(category2, 100)
            },
                                                 300);

            var actual = statistic;

            Assert.That(expected, Is.EqualTo(actual));
        }
        public static List <CategoryStatistic> CalculateStatistics(List <UserSpendingModel> spendings, List <string> categories)
        {
            // Step 0: Convert data to date time objects
            for (int i = 0; i < spendings.Count; i++)
            {
                spendings[i].DateTime = DateTime.Parse(spendings[i].Date.Replace(" ", ""));
            }

            // Step 1: Calculate Totals
            double alltimeTotal = 0;

            foreach (UserSpendingModel spending in spendings)
            {
                alltimeTotal += spending.SpendingAmount;
            }

            // Filter out all spendings pre last week
            DateTime today = DateTime.Today;

            DateTime lastWeek = today.AddDays(-8);

            List <UserSpendingModel> lastWeekSpendings = new List <UserSpendingModel>();

            foreach (UserSpendingModel spending in spendings)
            {
                if (spending.DateTime > lastWeek)
                {
                    lastWeekSpendings.Add(spending);
                }
            }

            double lastWeekTotal = 0;

            foreach (UserSpendingModel spending in lastWeekSpendings)
            {
                lastWeekTotal += spending.SpendingAmount;
            }

            // Step 2: Add statistic object for each category

            List <CategoryStatistic> categoryStatistics = new List <CategoryStatistic>();

            foreach (string category in categories)
            {
                CategoryStatistic statistic = new CategoryStatistic();

                statistic.CategoryName = category;

                // Calculate absolute spending for this category
                double categoryTotal = 0;
                foreach (UserSpendingModel spending in spendings)
                {
                    if (spending.Category == statistic.CategoryName)
                    {
                        categoryTotal += spending.SpendingAmount;
                    }
                }

                double weeklyCategoryTotal = 0;
                foreach (UserSpendingModel spending in lastWeekSpendings)
                {
                    if (spending.Category == statistic.CategoryName)
                    {
                        weeklyCategoryTotal += spending.SpendingAmount;
                    }
                }

                statistic.TotalAbsolute    = categoryTotal;
                statistic.WeeklyAbsolute   = weeklyCategoryTotal;
                statistic.TotalPercentage  = GetPercentage(categoryTotal / alltimeTotal * 100);
                statistic.WeeklyPercentage = GetPercentage(weeklyCategoryTotal / lastWeekTotal * 100);

                categoryStatistics.Add(statistic);
            }


            return(categoryStatistics);
        }