public void TestConstructor_ShouldInitializeCorrectly() { //Arrange && Act var categoryStatistic = new CategoryStatistic(); //Assert Assert.IsNotNull(categoryStatistic); }
public void TestConstructor_PassValidParameters_ShouldInitalizeCorrectly(int categoryId) { //Arrange & Act var categoryStatistic = new CategoryStatistic(categoryId); //Assert Assert.IsNotNull(categoryStatistic); }
public void CategoryId_ShouldSetCorrectly(int value) { //Arrange var categoryStatistic = new CategoryStatistic(); //Act categoryStatistic.CategoryId = value; //Assert Assert.AreEqual(value, categoryStatistic.CategoryId); }
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; }
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); }