public ActionResult StudentSignIn()
        {
            try
            {
                int scheduleId = (int)TempData["class"];

                IEnumerable <Yoga_User> yu = db.getScheduleSignUpList(scheduleId).ToList();

                TempData["class"] = db.getScheduleById(scheduleId);

                return(View(yu.OrderBy(x => x.U_Last_Name).ToList().OrderBy(x => x.U_First_Name).ToList()));
            }
            catch (Exception ex)
            {
                string error = ex.ToString();
                EmailSender.sendEmail(error);
                TempData["Message"] = "2 " + error;

                return(RedirectToAction("MessageView", "Home"));
            }
        }
        public ActionResult EditSchedule(FormCollection collection)
        {
            var classes  = db.getClassList();
            var teachers = db.getTeacherList();
            var rooms    = db.getRoomList();

            var scheduleViewModel = new ScheduleViewModel
            {
                Classes  = classes,
                Teachers = teachers,
                Rooms    = rooms
            };

            int id = (int)TempData["EditScheduleId"];

            var schedule = db.getScheduleById(id);

            ViewBag.EditSchedule = schedule;

            // getg

            var selectedTeacher = Convert.ToInt32(collection["SelectedTeacherId"]);
            //var selectedCLass = collection["SelectedClassId"];
            var selectedCLass = Convert.ToInt32(collection["SelectedClassId"]);
            var selectedRoom  = Convert.ToInt32(collection["SelectedRoomId"]);

            DateTime classDate  = Convert.ToDateTime(collection["classDate"]);
            TimeSpan timePicker = TimeSpan.Parse(collection["picker"]);

            var status = collection["status"];


            ViewBag.tid = selectedTeacher;
            ViewBag.cid = selectedCLass;
            ViewBag.rid = selectedRoom;

            XDocument xd           = db.getAvailability(selectedTeacher);
            string    dayOftheWeek = classDate.DayOfWeek.ToString();
            TimeSpan  sTime;
            TimeSpan  eTime;

            Yoga_User u = db.getUserById(selectedTeacher);

            if (DateTime.Now.Date > classDate)
            {
                ViewBag.message = "<p><span style=\"color:red\">Date Error: Can't Select Dates in the Past</span>";
                return(View(scheduleViewModel));
            }

            try
            {
                sTime = TimeSpan.Parse(xd.Root.Element(dayOftheWeek).Element("Start").Value);
                eTime = TimeSpan.Parse(xd.Root.Element(dayOftheWeek).Element("End").Value);
            }
            catch
            {
                ViewBag.message = "<p><span style=\"color:red\">Availability Error: </span>" + u.U_First_Name + " " + u.U_Last_Name + " is unavailable " + dayOftheWeek.ToLower() + "s.";
                return(View(scheduleViewModel));
            }

            Class    c        = db.getClass(selectedCLass);
            TimeSpan classEnd = timePicker.Add(c.Class_Length);

            ViewBag.time = timePicker.Hours + ":" + timePicker.Minutes;
            ViewBag.date = classDate.ToString("yyyy-MM-dd");

            // put db update method
            if (sTime > timePicker)
            {
                ViewBag.message = "Availability Error: " + u.U_First_Name + " " + u.U_Last_Name + " starts " + dayOftheWeek + " at " + sTime.Hours + ":" + sTime.Minutes.ToString("00");
                return(View(scheduleViewModel));
            }

            if (classEnd > eTime)
            {
                ViewBag.message = "<p><span style=\"color:red\">Availability Error: </span>" + u.U_First_Name + " " + u.U_Last_Name + " ends " + dayOftheWeek + " at " + eTime.Hours + ":" + eTime.Minutes.ToString("00") + "<br/>" +
                                  "Class End: " + classEnd.Hours + ":" + classEnd.Minutes.ToString("00") + "</p><br/>";
                return(View(scheduleViewModel));
            }

            IEnumerable <Schedule> sList = db.getScheduleByRoomAndDay(selectedRoom, classDate);

            foreach (Schedule s in sList)
            {
                String   date = s.Class_Date.ToString("dd/MM/yyyy");
                TimeSpan sEnd = s.Start_Time.Add(s.Class.Class_Length);
                if (timePicker >= s.Start_Time && timePicker < sEnd && s.Schedule_Id != schedule.Schedule_Id || classEnd > s.Start_Time && classEnd <= sEnd && s.Schedule_Id != schedule.Schedule_Id)
                {
                    ViewBag.message = "<p><span style=\"color:red\">Room Error: </span>" + s.Room.Room_Name + " is unavailable from " + s.Start_Time.Hours + ":" + s.Start_Time.Minutes.ToString("00") + " until " + sEnd.Hours + ":" + sEnd.Minutes.ToString("00") + " on " + date + "</p>";
                    return(View(scheduleViewModel));
                }
            }


            IEnumerable <Schedule> sListbyTeacher = db.getScheduleByTeacherAndDay(selectedTeacher, classDate);

            foreach (Schedule s in sListbyTeacher)
            {
                String   date = s.Class_Date.ToString("dd/MM/yyyy");
                TimeSpan sEnd = s.Start_Time.Add(s.Class.Class_Length);
                if (timePicker >= s.Start_Time && timePicker < sEnd && s.Schedule_Id != schedule.Schedule_Id || classEnd > s.Start_Time && classEnd <= sEnd && s.Schedule_Id != schedule.Schedule_Id)
                {
                    ViewBag.message = "<p><span style=\"color:red\">Availability Error: </span>" + u.U_First_Name + " " + u.U_Last_Name + " is already scheduleed from " + s.Start_Time.Hours + ":" + s.Start_Time.Minutes.ToString("00") + " until " + sEnd.Hours + ":" + sEnd.Minutes.ToString("00") + " on " + date + "</p>";
                    return(View(scheduleViewModel));
                }
            }

            if (schedule.Schedule_Status != status && status == "CANCELLED" && schedule.Class_Date.Date > DateTime.Now.Date)
            {
                List <Yoga_User> list = db.getScheduleSignUpList(schedule.Schedule_Id);
                db.CancelledScheduleRefund(id);
                EmailSender.ClassCancelledEmail(list, schedule);
            }

            if (schedule.Schedule_Status != status && status == "ACTIVE" && schedule.Class_Date.Date > DateTime.Now.Date)
            {
                List <Yoga_User> list = db.getScheduleSignUpList(schedule.Schedule_Id);
                db.RestoreScheduleRemoveUsers(id);
                EmailSender.ClassRestoreEmail(list, schedule);
            }

            schedule.Teacher_Id      = selectedTeacher;
            schedule.Class_Id        = selectedCLass;
            schedule.Room_Id         = selectedRoom;
            schedule.Class_Date      = classDate;
            schedule.Schedule_Status = status;

            db.UpdateSchedule(schedule);



            return(RedirectToAction("ScheduleList"));
        }