Beispiel #1
0
        // 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;
            }
        }