public async Task <IActionResult> DeleteConfirmed(int id)
        {
            ViewBag.UserInformation = SharedFunctionsController.GetUserNameBySignInID(User.Identity.Name);
            using (LearningManagementContext context = new LearningManagementContext())
            {
                var course = await context.Courses.FindAsync(id);

                try
                {
                    if (course.StartDate < DateTime.Today)
                    {
                        exception.ValidationExceptions.Add(new Exception("Error: Cannot delete a course that is in progress."));
                    }

                    else if (course.EndDate > DateTime.Today && course.StartDate < DateTime.Today)
                    {
                        exception.ValidationExceptions.Add(new Exception("Error: Cannot delete a course that is in progress."));
                    }

                    if (exception.ValidationExceptions.Count > 0)
                    {
                        throw exception;
                    }
                    context.Courses.Remove(course);
                    await context.SaveChangesAsync();

                    return(RedirectToAction(nameof(CourseList)));
                }

                catch (ValidationException e)
                {
                    ViewBag.Message   = "There exist problem(s) with your submission, see below.";
                    ViewBag.Exception = e;
                    ViewBag.Error     = true;
                }
                return(View(course));
            }
        }
        public async Task <IActionResult> CourseEdit(int id, [Bind("ID,UserID,CourseName,Subject,CourseDescription,GradeLevel,StartDate,EndDate,CurrentCapacity,MaxCapacity")] Course course)
        {
            ViewBag.UserInformation = SharedFunctionsController.GetUserNameBySignInID(User.Identity.Name);
            course.CourseName       = course.CourseName != null?course.CourseName.Trim() : null;

            course.Subject = course.Subject != null?course.Subject.Trim() : null;

            course.CourseDescription = course.CourseDescription != null?course.CourseDescription.Trim() : null;

            using (LearningManagementContext context = new LearningManagementContext())
            {
                if (id != course.ID)
                {
                    return(NotFound());
                }

                if (ModelState.IsValid)
                {
                    try
                    {
                        if (course.MaxCapacity <= 0)
                        {
                            exception.ValidationExceptions.Add(new Exception("Invalid Maximum Capacity: Course must have a minimum of 1 student."));
                        }
                        else
                        {
                            if (course.CurrentCapacity > course.MaxCapacity)
                            {
                                exception.ValidationExceptions.Add(new Exception("Invalid Current Capacity: Current capacity cannot exceed maximum capacity."));
                            }
                            else
                            {
                                if (course.StartDate > course.EndDate)
                                {
                                    exception.ValidationExceptions.Add(new Exception("Invalid Start Date: Course start date cannot be after end date."));
                                }
                            }
                        }

                        if (exception.ValidationExceptions.Count > 0)
                        {
                            throw exception;
                        }

                        ViewBag.CourseExists = true;

                        context.Update(course);
                        await context.SaveChangesAsync();

                        ViewBag.Message = $"Successfully updated course!";
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!(context.Courses.Any(x => x.ID == id)))
                        {
                            return(NotFound());
                        }
                        else
                        {
                            throw exception;
                        }
                    }
                    catch (ValidationException e)
                    {
                        ViewBag.Message   = "There is an issue(s) with the submission, please see the following details:";
                        ViewBag.Exception = e;
                        ViewBag.Error     = true;
                    }

                    // Create a list based on first name and last name from the User table that has a role equal to 2 (which is "Instructor")
                    var instructors = new SelectList(context.Users.Where(x => x.Role == 2)
                                                     .OrderBy(y => y.LastName)
                                                     .ToDictionary(us => us.ID, us => us.FirstName + " " + us.LastName), "Key", "Value", course.UserID);
                    ViewBag.Instructors       = instructors;
                    ViewBag.CourseName        = course.CourseName;
                    ViewBag.Subject           = course.Subject;
                    ViewBag.StartDate         = course.StartDate;
                    ViewBag.EndDate           = course.EndDate;
                    ViewBag.CourseDescription = course.CourseDescription;

                    // Create list of GradeLevels
                    var gradeLevels = new List <string>()
                    {
                        "Kindergarten", "Grade 1", "Grade 2", "Grade 3", "Grade 4", "Grade 5", "Grade 6", "Grade 7", "Grade 8", "Grade 9", "Grade 10", "Grade 11", "Grade 12"
                    };
                    // Populate dropdown list for grade levels.
                    var gradeLevelList = new SelectList(gradeLevels.ToDictionary(g => g, g => g), "Key", "Value", course.GradeLevel);
                    ViewBag.GradeLevels = gradeLevelList;

                    ViewBag.GradeLevel      = course.GradeLevel;
                    ViewBag.CurrentCapacity = course.CurrentCapacity;
                    ViewBag.MaxCapacity     = course.MaxCapacity;
                }
            }
            return(View());
        }
        public async Task <IActionResult> CourseCreate(string instructor, string courseName, string subject, string courseDescription, string gradeLevel, DateTime?startDate, DateTime?endDate, int currentCapacity, int maxCapacity, [Bind("ID,UserID,CourseName,Subject,CourseDescription,GradeLevel,StartDate,EndDate,MaxCapacity")] Course course)
        {
            ViewBag.UserInformation = SharedFunctionsController.GetUserNameBySignInID(User.Identity.Name);
            using (LearningManagementContext context = new LearningManagementContext())
            {
                instructor = instructor != null?instructor.Trim() : null;

                courseName = courseName != null?courseName.Trim() : null;

                subject = subject != null?subject.Trim() : null;

                courseDescription = courseDescription != null?courseDescription.Trim() : null;

                if (ModelState.IsValid)
                {
                    try
                    {
                        if (course.MaxCapacity <= 0)
                        {
                            exception.ValidationExceptions.Add(new Exception("Invalid Maximum Capacity: Course must have a minimum of 1 student"));
                        }
                        else
                        {
                            if (course.CurrentCapacity > course.MaxCapacity)
                            {
                                exception.ValidationExceptions.Add(new Exception("Invalid Current Capacity: Current capacity cannot exceed maximum capacity"));
                            }
                            else
                            {
                                if (course.StartDate > course.EndDate)
                                {
                                    exception.ValidationExceptions.Add(new Exception("Invalid Start Date: Course start date cannot be set past the end date"));
                                }

                                else
                                {
                                    if (course.StartDate < DateTime.Today)
                                    {
                                        exception.ValidationExceptions.Add(new Exception("Invalid Start Date: Course start date cannot be set prior to todays date"));
                                    }

                                    else
                                    {
                                        if (course.EndDate < DateTime.Today)
                                        {
                                            exception.ValidationExceptions.Add(new Exception("Invalid End Date: Course end date cannot be set prior to todays date"));
                                        }

                                        else
                                        {
                                            if (context.Courses.Any(x => x.CourseName == course.CourseName))
                                            {
                                                exception.ValidationExceptions.Add(new Exception("Invalid Course Name: That course already exists"));
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        if (exception.ValidationExceptions.Count > 0)
                        {
                            throw exception;
                        }
                        context.Add(course);
                        await context.SaveChangesAsync();

                        ViewBag.Message = $"Successfully created course!";
                    }
                    catch (ValidationException e)
                    {
                        ViewBag.Message   = "There is an issue(s) with the submission, please see the following details:";
                        ViewBag.Exception = e;
                        ViewBag.Error     = true;
                    }

                    var instructors = new SelectList(context.Users.Where(x => x.Role == 2)
                                                     .OrderBy(y => y.LastName)
                                                     .ToDictionary(us => us.ID, us => us.FirstName + " " + us.LastName), "Key", "Value", instructor);
                    ViewBag.Instructors = instructors;
                    ViewBag.CourseName  = courseName;

                    // Create list of Subjects
                    var courseSubjects = new List <string>()
                    {
                        "English", "Math", "Science", "Social Studies"
                    };
                    // Populate dropdown list for subjects.
                    var courseSubjectsList = new SelectList(courseSubjects.ToDictionary(s => s, s => s), "Key", "Value", courseSubjects);
                    ViewBag.CourseSubjects = courseSubjectsList;

                    ViewBag.Subject           = subject;
                    ViewBag.StartDate         = startDate;
                    ViewBag.EndDate           = endDate;
                    ViewBag.CourseDescription = courseDescription;

                    // Create list of GradeLevels
                    var gradeLevels = new List <string>()
                    {
                        "Kindergarten", "Grade 1", "Grade 2", "Grade 3", "Grade 4", "Grade 5", "Grade 6", "Grade 7", "Grade 8", "Grade 9", "Grade 10", "Grade 11", "Grade 12"
                    };
                    // Populate dropdown list for grade levels.
                    var gradeLevelList = new SelectList(gradeLevels.ToDictionary(g => g, g => g), "Key", "Value", gradeLevel);
                    ViewBag.GradeLevels = gradeLevelList;

                    ViewBag.GradeLevel = gradeLevel;
                    //ViewBag.CurrentCapacity = currentCapacity;
                    ViewBag.MaxCapacity = maxCapacity;
                }
            }
            return(View(course));
        }