// GET: GymClassTypes public ActionResult Index(int memberId = 0) { Tex.VerboseLog("Home/Index", memberId.ToString()); try { MemberBookings gmb = new MemberBookings(); DateTime oneHourFromNow = DateTime.Now.AddHours(1); var allFutureClasses = db.GymClass.Where(cl => cl.ClassDateTime > DateTime.Now).OrderBy(bk => bk.ClassDateTime).ToList(); GymMember gm; if (memberId == 0) { gm = GetCurrentGymMember(); } else { gm = db.GymMembers.Find(memberId); } var allBookableClasses = new List <ClassDetail>(); foreach (GymClass cl in allFutureClasses) { var bookableClass = cl.ToViewModel(true); if (gm != null) { var memberBooking = db.MemberClassBookings.Where(bk => bk.GymClassId == cl.GymClassId && bk.GymMemberId == gm.GymMemberId).FirstOrDefault(); if (memberBooking != null) { bookableClass.MemberStatus = memberBooking.Waiting ? MemberClassStatus.BookedWaiting : MemberClassStatus.BookedClass; } else { int nNonWaitBookings = db.MemberClassBookings.Where(bk => bk.GymClassId == cl.GymClassId && !bk.Waiting).Count(); if (nNonWaitBookings < cl.MaxCapacity) { bookableClass.MemberStatus = MemberClassStatus.EligibleClass; } else { bookableClass.MemberStatus = (bookableClass.nBookings < cl.MaxCapacity + cl.MaxWaitList ? MemberClassStatus.EligibleWaiting : MemberClassStatus.None); } } } bookableClass.IsLessThanAnHourAway = bookableClass.ClassDateTime <= oneHourFromNow; allBookableClasses.Add(bookableClass); } gmb.GymClasses = allBookableClasses; gmb.CurrentMember = gm; gmb.AllMembers = db.GymMembers.OrderBy(m => m.LastName).ToList(); foreach (var memb in gmb.AllMembers) { memb.FullName = String.Format("{0} {1}", memb.FirstName, memb.LastName); } return(View(gmb)); } catch (Exception ex) { Tex.Dump(ex, "Home Index Excetpion"); throw; } }