public ActionResult Create(DegreeProgram degreeprogram)
        {
            if (ModelState.IsValid)
            {
                int anid = Request<DegreeProgram>.Add(degreeprogram, "A", "B");

                return RedirectToAction("Edit", new { id = anid });
            }

            return View(degreeprogram);
        }
 private DegreeProgram createTempDegreeProgram()
 {
     DegreeProgram temp = new DegreeProgram()
     {
         ID = 3,
         degreeProgramName = "Degree Program 3",
         requiredCourses = new Collection<RequiredCourse>(),
         electiveCourses = new Collection<ElectiveCourse>(),
     };
     return temp;
 }
        public ActionResult Edit(DegreeProgram degreeprogram, IEnumerable<RequiredCourse> RequiredCourses, IEnumerable<ElectiveCourse> ElectiveCourses)
        {
            if (ModelState.IsValid)
            {
                DegreeProgram degreeAttached = Request<DegreeProgram>.GetItemByID(degreeprogram.ID, "A", "B");
                degreeprogram.requiredCourses = degreeAttached.requiredCourses;
                degreeprogram.electiveCourses = degreeAttached.electiveCourses;

                if(RequiredCourses == null){
                    RequiredCourses = new List<RequiredCourse>();
                }

                if (ElectiveCourses == null)
                {
                    ElectiveCourses = new List<ElectiveCourse>();
                }

                //figures out which courses were deleted from the form
                LinkedList<RequiredCourse> toRemove = new LinkedList<RequiredCourse>();
                foreach (RequiredCourse course in degreeAttached.requiredCourses)
                {
                    if (course.ID > 0)
                    {
                        if (!RequiredCourses.Contains(course))
                        {
                            RequiredCourse reqcourseAttached = Request<RequiredCourse>.GetItemByID(course.ID, "A", "B");
                            toRemove.AddFirst(reqcourseAttached);
                        }
                    }
                }
                //deletes those courses from the list
                while(toRemove.Count > 0){
                    RequiredCourse removeme = toRemove.First();
                    toRemove.RemoveFirst();
                    Request<RequiredCourse>.Delete(removeme.ID, "A", "B");
                }
                //clears the list
                degreeprogram.requiredCourses = new List<RequiredCourse>();
                //adds the courses that exist to the list
                foreach (RequiredCourse reqcourse in RequiredCourses)
                {
                    RequiredCourse reqcourseAttached = null; ;
                    if (reqcourse.ID > 0)
                    {
                        reqcourseAttached = Request<RequiredCourse>.GetItemByID(reqcourse.ID, "A", "B");
                        Request<RequiredCourse>.Update(reqcourseAttached, reqcourse, "A", "B");
                    }
                    else
                    {
                        if (Request<Course>.GetItemByID(reqcourse.courseID, "A", "B") != null)
                        {
                            int id = Request<RequiredCourse>.Add(reqcourse, "A", "B");
                            reqcourseAttached = Request<RequiredCourse>.GetItemByID(id, "A", "B");
                        }
                    }
                    if (reqcourseAttached != null)
                    {
                        degreeprogram.requiredCourses.Add(reqcourseAttached);
                    }
                }

                //figures out which elective lists were deleted from the list
                LinkedList<ElectiveCourse> toRemoveMe = new LinkedList<ElectiveCourse>();
                foreach (ElectiveCourse course in degreeAttached.electiveCourses)
                {
                    if (!ElectiveCourses.Contains(course))
                    {
                        ElectiveCourse elcourseAttached = Request<ElectiveCourse>.GetItemByID(course.ID, "A", "B");
                        toRemoveMe.AddFirst(elcourseAttached);
                    }
                }
                //remove those elective lists from the list
                while (toRemoveMe.Count > 0)
                {
                    ElectiveCourse removeme = toRemoveMe.First();
                    toRemoveMe.RemoveFirst();
                    Request<ElectiveCourse>.Delete(removeme.ID, "A", "B");
                }
                //clear the list
                degreeprogram.electiveCourses = new List<ElectiveCourse>();
                //add the existing elective lists to the list
                foreach (ElectiveCourse elcourse in ElectiveCourses)
                {
                    ElectiveCourse elcourseAttached = null; ;
                    if (elcourse.ID > 0)
                    {
                        elcourseAttached = Request<ElectiveCourse>.GetItemByID(elcourse.ID, "A", "B");
                        Request<ElectiveCourse>.Update(elcourseAttached, elcourse, "A", "B");
                    }
                    else
                    {
                        if (Request<ElectiveList>.GetItemByID(elcourse.electiveListID, "A", "B") != null)
                        {
                            int id = Request<ElectiveCourse>.Add(elcourse, "A", "B");
                            elcourseAttached = Request<ElectiveCourse>.GetItemByID(id, "A", "B");
                        }
                    }
                    if (elcourseAttached != null)
                    {
                        degreeprogram.electiveCourses.Add(elcourseAttached);
                    }
                }

                Request<DegreeProgram>.Update(degreeAttached, degreeprogram, "A", "B");
                return RedirectToAction("Index");
            }
            if (RequiredCourses != null)
            {
                foreach (RequiredCourse course in RequiredCourses)
                {
                    if (course.courseID > 0)
                    {
                        course.course = Request<Course>.GetItemByID(course.courseID, "A", "B");
                    }
                }
            }
            degreeprogram.requiredCourses = RequiredCourses.ToList();

            if (ElectiveCourses != null)
            {
                foreach (ElectiveCourse course in ElectiveCourses)
                {
                    if (course.electiveListID > 0)
                    {
                        course.electiveList = Request<ElectiveList>.GetItemByID(course.electiveListID, "A", "B");
                    }
                }
            }
            degreeprogram.electiveCourses = ElectiveCourses.ToList();

            return View(degreeprogram);
        }