Example #1
0
        public ActionResult Index(bool?isActive, int?page)
        {
            // Nastavení uskutečněných lekcí jako neaktivních
            LessonDao lessonDao = new LessonDao();

            lessonDao.SetExpiredLessons();

            // Tato proměnná by správně neměla být definována uvnitř controlleru, ale měla by to být konfigurační konstanta.
            const int itemsOnPage = 10;
            int       pg          = page.HasValue ? page.Value : 1;
            int       totalClientsReservations;

            FitnessCentreUser user           = new FitnessCentreUserDao().GetByLogin(User.Identity.Name);
            ReservationDao    reservationDao = new ReservationDao();

            // Větvení pro výběr uplynulých/aktivních či všech rezervací.
            IList <Reservation> listClientsReservationsPerPage;

            if (isActive.HasValue)
            {
                listClientsReservationsPerPage = reservationDao.GetRestrictedClientsReservationsPaged(isActive, user.Id, itemsOnPage, pg, out totalClientsReservations);
            }
            else
            {
                listClientsReservationsPerPage = reservationDao.GetClientsReservationsPaged(user.Id, itemsOnPage, pg, out totalClientsReservations);
            }

            ViewBag.CurrentIsActive = isActive; // Pamatovat si nastavení výběru uplynulých/aktivních lekcí.
            // Výpočet počtu stránek.
            ViewBag.Pages       = (int)Math.Ceiling((double)totalClientsReservations / (double)itemsOnPage);
            ViewBag.CurrentPage = pg;

            // Rezervaci nelze zrušit 6h před zahájením lekce.
            foreach (Reservation reservation in listClientsReservationsPerPage)
            {
                DateTime sixHoursBeforeStart = reservation.Lesson.StartTime.AddHours(-6); // Výpočet času 6h před zahájením lekce.
                reservation.IsCancellable = true;                                         // Pro jistotu předvyplnění vlastnosti. Zabránění null hodnotám.

                // Porovnání CompareTo vrací hodnoty -1, 0, 1. Pokud aktuální čas je v rozmezí 6 hodin před zahájením lekce a více.
                if (DateTime.Now.CompareTo(sixHoursBeforeStart) > 0)
                {
                    reservation.IsCancellable = false;
                }
            }

            if (Request.IsAjaxRequest())
            {
                return(PartialView(listClientsReservationsPerPage));
            }
            else
            {
                return(View(listClientsReservationsPerPage));
            }
        }