public async Task <IActionResult> PutDayTotal(int id, DayTotal dayTotal) { if (id != dayTotal.DayTotalID) { return(BadRequest()); } _context.Entry(dayTotal).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!DayTotalExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <ActionResult <DayTotal> > PostDayTotal(DayTotal dayTotal) { _context.DayTotal.Add(dayTotal); await _context.SaveChangesAsync(); return(CreatedAtAction("GetDayTotal", new { id = dayTotal.DayTotalID }, dayTotal)); }
public async Task <ActionResult <IEnumerable <DayTotal> > > GetDayTotal(int date) { var dateTime = DateTime.UtcNow.Date; date += 1; for (int index = 0; index <= 6; index++) { var temp = await _context.DayTotal.FirstOrDefaultAsync(d => d.Date == dateTime.AddDays(date - index).AddHours(-8).ToString("dd/MM/yyyy")); //Trace.WriteLine("Hello Worsld!", index.ToString()); if (temp == null) { var temp2 = new DayTotal { }; temp2.TotalCarbs = 0; temp2.TotalFats = 0; temp2.TotalProtein = 0; temp2.Date = dateTime.AddDays((date) - index).AddHours(-8).ToString("dd/MM/yyyy"); temp2.RealDate = dateTime.AddDays(date - index).AddHours(-8); _context.DayTotal.Add(temp2); await _context.SaveChangesAsync(); } } var dbSet = await _context.DayTotal.Where(d => d.RealDate == dateTime.AddDays(date - 6).AddHours(-8) || d.RealDate == dateTime.AddDays(date - 5).AddHours(-8) || d.RealDate == dateTime.AddDays(date - 4).AddHours(-8) || d.RealDate == dateTime.AddDays(date - 3).AddHours(-8) || d.RealDate == dateTime.AddDays(date - 2).AddHours(-8) || d.RealDate == dateTime.AddDays(date - 1).AddHours(-8) || d.RealDate == dateTime.AddDays(date).AddHours(-8)) .OrderByDescending(d => d.RealDate) .ToListAsync(); for (int index = 0; index <= 6; index++) { var temp = await _context.DayTotal.FirstOrDefaultAsync(d => d.Date == dateTime.AddDays(date - index).AddHours(-8).ToString("dd/MM/yyyy")); if (temp.TotalCarbs + temp.TotalFats + temp.TotalProtein == 0) { _context.DayTotal.Remove(temp); await _context.SaveChangesAsync(); } } return(dbSet); }
public async Task CalculateStatistics() { // todo loop all users. var allUsersQuery = DocumentDbBase.DocumentStore.GetItems <ApplicationUser>(x => x.Type == DocumentDbType.User); var allUsers = allUsersQuery.ToList(); foreach (var applicationUser in allUsers) { //start with a clean slate for each user applicationUser.Statistics = new Statistics(); var userOrderHistoriesQuery = DocumentDbBase.DocumentStore.GetItems <UserOrderHistory>(x => x.UserId == applicationUser.UserId && x.Type == DocumentDbType.UserHistory); var userOrderHistories = userOrderHistoriesQuery.ToList(); foreach (var userOrderHistory in userOrderHistories) { var monthlyTotal = applicationUser.Statistics.MonthlyTotals.FirstOrDefault(x => x.MonthDate == x.ParseMonth(userOrderHistory.OrderTime)); if (monthlyTotal == null) { monthlyTotal = new MonthlyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.MonthlyTotals.Add(monthlyTotal); } var yearlyTotal = applicationUser.Statistics.YearlyTotals.FirstOrDefault(x => x.YearDate == x.ParseYear(userOrderHistory.OrderTime)); if (yearlyTotal == null) { yearlyTotal = new YearlyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.YearlyTotals.Add(yearlyTotal); } var weeklyTotal = applicationUser.Statistics.WeeklyTotals.FirstOrDefault(x => x.WeekDate == x.ParseWeek(userOrderHistory.OrderTime)); if (weeklyTotal == null) { weeklyTotal = new WeeklyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.WeeklyTotals.Add(weeklyTotal); } var dailyTotal = applicationUser.Statistics.DayTotals.FirstOrDefault(x => x.DayDate == x.ParseDay(userOrderHistory.OrderTime)); if (dailyTotal == null) { dailyTotal = new DayTotal(userOrderHistory.OrderTime); applicationUser.Statistics.DayTotals.Add(dailyTotal); } foreach (var entry in userOrderHistory.Entries) { if (_pastaEntriesList.Contains(entry.Id)) { yearlyTotal.PastaOrderCount += 1; } if (_healtyEntriesList.Contains(entry.Id)) { weeklyTotal.HealthyOrderCount += 1; } yearlyTotal.OrderCount += 1; yearlyTotal.Amount += entry.Price; weeklyTotal.OrderCount += 1; weeklyTotal.Amount += entry.Price; monthlyTotal.OrderCount += 1; monthlyTotal.Amount += entry.Price; dailyTotal.Amount += entry.Price; dailyTotal.OrderCount += 1; // calculate badges DateTime orderTime = DateTime.Parse("01/01/2001 10:00:00"); if (userOrderHistory.OrderTime < DateTime.Parse("12/06/2017 10:00:00")) { orderTime = DateTime.Parse("01/01/2001 9:00:00"); } BadgeService.ExtractOrderBadges(applicationUser, userOrderHistory, orderTime); } applicationUser.Statistics.AppTotalSpend += userOrderHistory.FinalPrice; await DocumentDbBase.DocumentStore.UpsertDocument(userOrderHistory); } var userPrepaysQuery = DocumentDbBase.DocumentStore.GetItems <UserBalanceAudit>(x => x.UserId == applicationUser.UserId && x.Type == DocumentDbType.UserBalanceAudit); var userPrepays = userPrepaysQuery.ToList(); foreach (var prepay in userPrepays) { foreach (var audit in prepay.Audits) { // there might be a difference in prepayedTotal as in first versions this was not been audited. applicationUser.Statistics.PrepayedTotal += audit.Amount; } } // remove historical data var daysToDelete = applicationUser.Statistics.DayTotals.Where(x => x.DayDate != x.ParseDay(DateTime.UtcNow)).ToList(); foreach (var dayToDelete in daysToDelete) { applicationUser.Statistics.DayTotals.Remove(dayToDelete); } var weeksToDelete = applicationUser.Statistics.WeeklyTotals.Where(x => x.WeekDate != x.ParseWeek(DateTime.UtcNow)).ToList(); foreach (var weekToDelete in weeksToDelete) { applicationUser.Statistics.WeeklyTotals.Remove(weekToDelete); } var monthsToDelete = applicationUser.Statistics.MonthlyTotals.Where(x => x.MonthDate != x.ParseMonth(DateTime.UtcNow)).ToList(); foreach (var monthToDelete in monthsToDelete) { applicationUser.Statistics.MonthlyTotals.Remove(monthToDelete); } var yearsToDelete = applicationUser.Statistics.YearlyTotals.Where(x => x.YearDate != x.ParseYear(DateTime.UtcNow)).ToList(); foreach (var yearToDelete in yearsToDelete) { applicationUser.Statistics.YearlyTotals.Remove(yearToDelete); } // save document await DocumentDbBase.DocumentStore.UpsertDocument(applicationUser); } }
private void CalculateStatistics(ApplicationUser applicationUser, Domain.Entities.DocumentDb.UserOrderHistory userOrderHistory) { if (!userOrderHistory.StatisticsProcessed) { var monthlyTotal = applicationUser.Statistics.MonthlyTotals.FirstOrDefault(x => x.MonthDate == x.ParseMonth(userOrderHistory.OrderTime)); if (monthlyTotal == null) { monthlyTotal = new MonthlyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.MonthlyTotals.Add(monthlyTotal); } var yearlyTotal = applicationUser.Statistics.YearlyTotals.FirstOrDefault(x => x.YearDate == x.ParseYear(userOrderHistory.OrderTime)); if (yearlyTotal == null) { yearlyTotal = new YearlyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.YearlyTotals.Add(yearlyTotal); } var weeklyTotal = applicationUser.Statistics.WeeklyTotals.FirstOrDefault(x => x.WeekDate == x.ParseWeek(userOrderHistory.OrderTime)); if (weeklyTotal == null) { weeklyTotal = new WeeklyTotal(userOrderHistory.OrderTime); applicationUser.Statistics.WeeklyTotals.Add(weeklyTotal); } var dailyTotal = applicationUser.Statistics.DayTotals.FirstOrDefault(x => x.DayDate == x.ParseDay(userOrderHistory.OrderTime)); if (dailyTotal == null) { dailyTotal = new DayTotal(userOrderHistory.OrderTime); applicationUser.Statistics.DayTotals.Add(dailyTotal); } foreach (var entry in userOrderHistory.Entries) { if (entry.Pasta) { yearlyTotal.PastaOrderCount += 1; } if (entry.Healthy) { weeklyTotal.HealthyOrderCount += 1; } yearlyTotal.OrderCount += 1; yearlyTotal.Amount += entry.FinalPrice; weeklyTotal.OrderCount += 1; weeklyTotal.Amount += entry.FinalPrice; monthlyTotal.OrderCount += 1; monthlyTotal.Amount += entry.FinalPrice; dailyTotal.Amount += entry.FinalPrice; dailyTotal.OrderCount += 1; } applicationUser.Statistics.AppTotalSpend += userOrderHistory.FinalPrice; userOrderHistory.StatisticsProcessed = true; // cleanup old data var daysToDelete = applicationUser.Statistics.DayTotals.Where(x => x.DayDate != x.ParseDay(DateTime.UtcNow)).ToList(); foreach (var dayToDelete in daysToDelete) { applicationUser.Statistics.DayTotals.Remove(dayToDelete); } var weeksToDelete = applicationUser.Statistics.WeeklyTotals.Where(x => x.WeekDate != x.ParseWeek(DateTime.UtcNow)).ToList(); foreach (var weekToDelete in weeksToDelete) { applicationUser.Statistics.WeeklyTotals.Remove(weekToDelete); } var monthsToDelete = applicationUser.Statistics.MonthlyTotals.Where(x => x.MonthDate != x.ParseMonth(DateTime.UtcNow)).ToList(); foreach (var monthToDelete in monthsToDelete) { applicationUser.Statistics.MonthlyTotals.Remove(monthToDelete); } var yearsToDelete = applicationUser.Statistics.YearlyTotals.Where(x => x.YearDate != x.ParseYear(DateTime.UtcNow)).ToList(); foreach (var yearToDelete in yearsToDelete) { applicationUser.Statistics.YearlyTotals.Remove(yearToDelete); } } }