public async Task <UserDashboardModel> GetUserDashboard() { var user = DB.Users.Find(UserId); UserDashboardModel dashboard = new UserDashboardModel() { Money = new UserDashboardModel.MoneySpec <double>(), Reservations = new UserDashboardModel.ReservationSpec <long>() }; // var reservations = await DB.Reservations.AsNoDbSetFilter().Where(x => x.User.Id == UserId).Select(x => new { x.DateCreated, x.Route.DepartureTime, x.Route.ArrivalTime, x.Cancelled }).ToListAsync(); dashboard.Reservations.Total = reservations.Count; foreach (var r in reservations) { if (DateHelper.IsToday(r.DateCreated)) { dashboard.Reservations.Today++; } if (DateHelper.IsYesterday(r.DateCreated)) { dashboard.Reservations.Yesterday++; } if (DateHelper.IsThisWeek(r.DateCreated)) { dashboard.Reservations.Week++; } if (DateHelper.IsThisMonth(r.DateCreated)) { dashboard.Reservations.Month++; } if (!r.Cancelled) { switch (RouteHelpers.Categorize(r.DepartureTime, r.ArrivalTime)) { case BusRouteState.Active: dashboard.Reservations.Active++; break; case BusRouteState.Used: dashboard.Reservations.Used++; break; case BusRouteState.Pending: dashboard.Reservations.Pending++; break; } } } // var transactions = await DB.Transactions.Where(x => x.Wallet.User.Id == UserId).Select(x => new { x.DateCreated, x.IdealAmount, x.Type, x.Status }).AsNoTracking().ToListAsync(); var successfulTxn = transactions.Where(x => x.Status == TransactionStatus.Successful && x.Type == TransactionType.Charge); dashboard.Money.Total = successfulTxn.Count() == 0 ? 0 : successfulTxn.Sum(x => x.IdealAmount); foreach (var t in successfulTxn) { if (DateHelper.IsToday(t.DateCreated)) { dashboard.Money.Today += t.IdealAmount; } if (DateHelper.IsYesterday(t.DateCreated)) { dashboard.Money.Yesterday += t.IdealAmount; } if (DateHelper.IsThisWeek(t.DateCreated)) { dashboard.Money.Week += t.IdealAmount; } if (DateHelper.IsThisMonth(t.DateCreated)) { dashboard.Money.Month += t.IdealAmount; } } var refundedTxn = transactions.Where(x => x.Type == TransactionType.Refund && x.Status == TransactionStatus.Successful); dashboard.Money.Refunded = refundedTxn.Count() == 0 ? 0 : refundedTxn.Sum(x => x.IdealAmount); return(dashboard); }
public async Task <AdminDashboardModel> GetAdminDashboard() { AdminDashboardModel dashboard = new AdminDashboardModel() { Buses = new AdminDashboardModel.BusSpec(), Money = new AdminDashboardModel.MoneySpec <double>(), Reservations = new AdminDashboardModel.ReservationSpec <long>(), Routes = new AdminDashboardModel.RoutesSpec(), Users = new AdminDashboardModel.UsersSpec() }; // var reservations = DB.Reservations.Select(x => new { x.DateCreated, x.Cancelled, x.Route.DepartureTime, x.Route.ArrivalTime }).AsNoTracking().Future(); var users = DB.Users.Where(x => x.Claims.FirstOrDefault(t => t.ClaimType == ClaimTypes.Role).Value == UserRoles.User).Select(x => new { x.DateCreated, x.EmailConfirmed, x.PhoneConfirmed, x.LockedOut, }).AsNoTracking().Future(); var buses = DB.Buses.Select(x => new { x.DateCreated, Routes = x.Routes.Select(t => new { t.DateCreated, t.ArrivalTime, t.DepartureTime }) }).AsNoTracking().Future(); var transactions = DB.Transactions.Select(x => new { x.DateCreated, x.Status, x.Type, x.IdealAmount }).AsNoTracking().Future(); var routes = DB.Routes.Select(x => new { x.DateCreated, x.ArrivalTime, x.DepartureTime }).AsNoTracking().Future(); // var qReservations = await reservations.ToListAsync(); dashboard.Reservations.Total = qReservations.Count; foreach (var r in qReservations) { if (DateHelper.IsToday(r.DateCreated)) { dashboard.Reservations.Today++; } if (DateHelper.IsYesterday(r.DateCreated)) { dashboard.Reservations.Yesterday++; } if (DateHelper.IsThisWeek(r.DateCreated)) { dashboard.Reservations.Week++; } if (DateHelper.IsThisMonth(r.DateCreated)) { dashboard.Reservations.Month++; } switch (RouteHelpers.Categorize(r.DepartureTime, r.ArrivalTime)) { case BusRouteState.Active: dashboard.Reservations.Active++; break; case BusRouteState.Used: dashboard.Reservations.Used++; break; case BusRouteState.Pending: dashboard.Reservations.Pending++; break; } } var qUsers = await users.ToListAsync(); dashboard.Users.TotalUsers = qUsers.Count; foreach (var u in qUsers) { if ((u.EmailConfirmed || u.PhoneConfirmed) && !u.LockedOut) { if (DateHelper.IsToday(u.DateCreated)) { dashboard.Users.RegisteredToday++; } if (DateHelper.IsYesterday(u.DateCreated)) { dashboard.Users.RegisteredYesterday++; } if (DateHelper.IsThisWeek(u.DateCreated)) { dashboard.Users.RegisteredWeek++; } if (DateHelper.IsThisMonth(u.DateCreated)) { dashboard.Users.RegisteredMonth++; } } if (!u.EmailConfirmed) { dashboard.Users.PendingActivation++; } } var qBuses = await buses.ToListAsync(); var activeBuses = qBuses.Where(x => x.Routes.Any(t => RouteHelpers.Categorize(t.DepartureTime, t.ArrivalTime) == BusRouteState.Active)); dashboard.Buses.Total = qBuses.Count; dashboard.Buses.TotalActive = activeBuses.Count(); foreach (var bus in qBuses) { var bRoutes = bus.Routes; if (bRoutes.Any(x => DateHelper.IsToday(x.DepartureTime))) { dashboard.Buses.ActiveToday++; } if (bRoutes.Any(x => DateHelper.IsYesterday(x.DepartureTime))) { dashboard.Buses.ActiveYesterday++; } if (bRoutes.Any(x => DateHelper.IsThisWeek(x.DepartureTime))) { dashboard.Buses.ActiveWeek++; } if (bRoutes.Any(x => DateHelper.IsToday(x.ArrivalTime))) { dashboard.Buses.CompleteToday++; } if (bRoutes.Any(x => DateHelper.IsYesterday(x.ArrivalTime))) { dashboard.Buses.CompleteYesterday++; } if (bRoutes.Any(x => DateHelper.IsThisWeek(x.ArrivalTime))) { dashboard.Buses.CompleteWeek++; } } var qTransactions = await transactions.ToListAsync(); var refundedTxn = qTransactions.Where(x => x.Type == TransactionType.Refund && x.Status == TransactionStatus.Successful); dashboard.Money.Refunded = refundedTxn.Count() == 0 ? 0 : refundedTxn.Sum(x => x.IdealAmount); foreach (var t in qTransactions.Where(x => x.Status == TransactionStatus.Successful && x.Type == TransactionType.Charge)) { if (DateHelper.IsToday(t.DateCreated)) { dashboard.Money.Today += t.IdealAmount; } if (DateHelper.IsYesterday(t.DateCreated)) { dashboard.Money.Yesterday += t.IdealAmount; } if (DateHelper.IsThisWeek(t.DateCreated)) { dashboard.Money.Week += t.IdealAmount; } if (DateHelper.IsThisMonth(t.DateCreated)) { dashboard.Money.Month += t.IdealAmount; } dashboard.Money.Total += t.IdealAmount; } // var qRoutes = await routes.ToListAsync(); dashboard.Routes.Total = qRoutes.Count; return(dashboard); }