public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Booking booking = db.Bookings.Find(id);

            var mgmt = new BookingMgmt(bookingRepository);

            BookingRepository repository = new BookingRepository();
            var userRoles = repository.GetRoles(User.Identity.Name);

            if (booking.CreatedBy == User.Identity.Name || userRoles.Any(ur => ur == "admin"))
            {
                return(View(mgmt.GetEdit(booking)));
            }
            else
            {
                return(View("Unauthorized"));
            }

            //if (booking == null)
            //{
            //    return HttpNotFound();
            //}
            //ViewBag.Rooms = new SelectList(db.Room, "Rooms", "RoomName", booking.Rooms);
            //return View(booking);
        }
 public ActionResult DailyBookings()
 {
     using (var bookingRepository = new BookingRepository())
     {
         var mgmt = new BookingMgmt(bookingRepository);
         return(View(mgmt.GetDailyBookings(DateTime.Now)));
     }
 }
        // GET: Booking
        public ActionResult DailyBookings(DateTime?date = null)
        {
            //var bookings = db.Bookings.Include(b => b.Room);
            if (date == null)
            {
                date = DateTime.Today;
            }

            using (var bookingRepository = new BookingRepository())
            {
                var mgmt = new BookingMgmt(bookingRepository);
                return(View(mgmt.GetDailyBookings(date.Value)));
            }
        }
        public ActionResult MonthlyBookings(DateTime?date, string roomName)
        {
            if (date == null)
            {
                date = DateTime.Today;
            }
            if (roomName == null)
            {
                roomName = "Rush";
            }
            ViewBag.SelectRoom = roomName;

            using (var bookingRepository = new BookingRepository())
            {
                var mgmt = new BookingMgmt(bookingRepository);
                return(View(mgmt.GetMonthlyBookings(date.Value, roomName)));
            }
        }
        public ActionResult WeeklyBookings(string roomName, DateTime?date)
        {
            if (date == null)
            {
                date = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek) + 6) % 7);
            }

            if (roomName == null)
            {
                roomName = "Rush";
            }
            ViewBag.SelectRoom = roomName;

            using (var bookingRepository = new BookingRepository())
            {
                var mgmt = new BookingMgmt(bookingRepository);
                return(View(mgmt.GetWeeklyBookings(date.Value, roomName)));
            }
        }
        public ActionResult Edit(BookingEdit booking, string bookingType)
        {
            booking.DateCreated = DateTime.Now;
            booking.CreatedBy   = User.Identity.Name.ToString();
            booking.StartDate   = booking.StartDate.AddHours(double.Parse(booking.StartTime));
            booking.EndDate     = booking.EndDate.AddHours(double.Parse(booking.EndTime));
            booking.BookingType = bookingType;



            if (ModelState.IsValid)
            {
                bool conflict = false;

                foreach (var id in booking.RoomIds)
                {
                    if (db.Bookings.Any(b => ((b.StartTime >= booking.StartDate) && (b.EndTime <= booking.EndDate)) && b.RoomId.Equals(id) && b.BookingId != booking.BookingId))
                    {
                        conflict      = true;
                        ViewBag.Error = "This room and time have been reserved.";
                    }
                }
                if (!conflict)
                {
                    if (booking.EndDate < booking.StartDate)
                    {
                        ViewBag.Error = "The End Date Can't Be Before the Start Date.";
                    }
                    else
                    {
                        foreach (var id in booking.RoomIds)
                        {
                            db.Entry(booking.GetBooking(id)).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        return(RedirectToAction("Details", new { id = booking.BookingId }));
                    }
                }
            }
            var mgmt = new BookingMgmt(bookingRepository);

            return(View(mgmt.GetBookingEdit(booking.StartDate, booking.StartDate, booking.EndDate, booking.ViewRoomName, booking.ViewName)));
        }
        public ActionResult Create(DateTime date, DateTime starttime1, DateTime endtime1, string roomname)
        {
            Uri myURl = Request.UrlReferrer;

            string view;

            if (myURl.AbsolutePath == "/")
            {
                view = myURl.AbsolutePath;
            }
            else
            {
                view = myURl.Segments[2];
            }

            var mgmt = new BookingMgmt(bookingRepository);

            return(View(mgmt.GetBookingEdit(date, starttime1, endtime1, roomname, view)));
        }
        public ActionResult Create(BookingEdit booking, string bookingType, string viewName, string viewRoomName, string option, string monthlyoption, int increment)
        {
            DateTime resetDate = booking.StartDate;

            booking.RepeadEnd = booking.RepeadEnd.AddDays(1).AddSeconds(-1);

            booking.DateCreated = DateTime.Now;
            booking.CreatedBy   = User.Identity.Name.ToString();
            booking.StartDate   = booking.StartDate.AddHours(double.Parse(booking.StartTime));
            booking.EndDate     = booking.EndDate.AddHours(double.Parse(booking.EndTime));
            booking.BookingType = bookingType;

            var mgmt = new BookingMgmt(bookingRepository);

            switch (option)
            {
            case "Daily":
                potentialBookings = mgmt.DailyRecurring(booking);
                break;

            case "Weekly":
                potentialBookings = mgmt.WeeklyRecurring(booking, increment);
                break;

            case "Monthly":
                if (monthlyoption == "Day")
                {
                    potentialBookings = mgmt.MonthlyByDay(booking);
                }
                else if (monthlyoption == "Increment")
                {
                    potentialBookings = mgmt.MonthlyIncrement(booking);
                }
                break;

            default:     // code for non recurring
                if (ModelState.IsValid)
                {
                    bool conflict = false;

                    foreach (var id in booking.RoomIds)
                    {
                        if (db.Bookings.Any(b => ((b.StartTime >= booking.StartDate) && (b.EndTime <= booking.EndDate)) && b.RoomId.Equals(id)))
                        {
                            conflict      = true;
                            ViewBag.Error = "This room and time have been reserved.";
                        }
                    }

                    if (!conflict)
                    {
                        if (booking.EndDate < booking.StartDate)
                        {
                            ViewBag.Error = "The End Date Can't Be Before the Start Date.";
                        }
                        else
                        {
                            foreach (var id in booking.RoomIds)
                            {
                                bookingRepository.InsertBooking(booking.GetBooking(id));
                                bookingRepository.Save();
                            }

                            if (viewName == "/")
                            {
                                return(RedirectToAction("DailyBookings", new { date = booking.StartDate.ToString("yyyy-MM-dd") }));
                            }
                            else
                            {
                                return(RedirectToAction(viewName, new { date = booking.StartDate.AddDays(-(((int)booking.StartDate.DayOfWeek) + 6) % 7), roomName = viewRoomName }));
                            }
                        }
                    }
                }
                return(View(mgmt.GetBookingEdit(booking.StartDate, booking.StartDate, booking.EndDate, booking.ViewRoomName, booking.ViewName)));
                //break;
            }

            List <Booking> failedBookings = new List <Booking>();

            foreach (var date in potentialBookings)
            {
                booking.StartDate = date.AddHours(double.Parse(booking.StartTime));
                booking.EndDate   = date.AddHours(double.Parse(booking.EndTime));

                if (ModelState.IsValid)
                {
                    foreach (var id in booking.RoomIds)
                    {
                        if (db.Bookings.Any(b => ((b.StartTime >= booking.StartDate) && (b.EndTime <= booking.EndDate)) && b.RoomId.Equals(id)))
                        {
                            failedBookings.Add(booking.GetBooking(id));
                            //ViewBag.Error = "This room and time have been reserved.";
                            //potentialBookings.Remove(date);
                        }
                        else
                        {
                            bookingRepository.InsertBooking(booking.GetBooking(id));
                            bookingRepository.Save();
                        }
                    }
                }
            }
            StringBuilder sb = new StringBuilder();

            if (failedBookings.Count >= 1)
            {
                sb.Append("The following were not booked due to confilcts: \n\n");

                foreach (var item in failedBookings)
                {
                    string roomName = db.Rooms.
                                      Where(r => (r.RoomId.Equals(item.RoomId))).
                                      Select(r => r.RoomName).FirstOrDefault();

                    sb.Append(item.StartTime + " - " + item.EndTime.TimeOfDay + " " + roomName + "\n");
                }
            }
            TempData["ErrorList"] = sb.ToString();

            if (viewName == "/")
            {
                return(RedirectToAction("DailyBookings", new { date = resetDate.ToString("yyyy-MM-dd") }));
            }
            else
            {
                return(RedirectToAction(viewName, new { date = resetDate.AddDays(-(((int)resetDate.DayOfWeek) + 6) % 7), roomName = viewRoomName }));
            }

            //var mgmt = new BookingMgmt(bookingRepository);
            //return View(mgmt.GetBookingEdit(booking.StartDate, booking.StartDate, booking.EndDate, booking.ViewRoomName, booking.ViewName));
        }