/// <summary>
        /// Setup view model after post, where user select fruit data (For edit view - httppost)
        /// </summary>
        /// <param name="postedRaces"></param>
        /// <returns></returns>
        private UltimateViewModel GetRacesModel(UltimateViewModel ultimate, PostedRaces postedRaces)
        {
            //Setup properties
            var rvm           = ultimate.RacesViewModel;
            var selectedRaces = rvm.SelectedRaces;
            var postedRaceIds = new string[0];

            postedRaces = rvm.PostedRaces;
            if (postedRaces == null)
            {
                postedRaces = new PostedRaces();
            }

            //Save selected ids (if array of posted exists and not empty)
            if (postedRaces.RaceIDs != null && postedRaces.RaceIDs.Any())
            {
                postedRaceIds = postedRaces.RaceIDs;
            }

            //Create list of fruits (if any selected ids saved)
            //if (postedRaceIds.Any())
            //{
            //    //selectedRaces = RaceRepository.GetAll().Where(x => postedRaceIds.Any(s => x.Id.ToString().Equals(s))).ToList();
            //    selectedRaces = db.Races.Where(x => postedRaceIds.Any(s => x.Id.ToString().Equals(s))).ToList();
            //}

            //Setup view model
            rvm.AvailableRaces = db.Races.ToList();//RaceRepository.GetAll().ToList();
            rvm.SelectedRaces  = selectedRaces;
            rvm.PostedRaces    = postedRaces;

            ultimate.RacesViewModel = rvm;

            return(ultimate);
        }
        /// <summary>
        /// Initial view model of all races (edit view - httpget)
        /// </summary>
        /// <param name="ultimate"></param>
        /// <returns>UltimateViewModel</returns>
        private UltimateViewModel GetRacesInitialModel(UltimateViewModel ultimate, int?thisId)
        {
            //setup properties
            var rvm         = ultimate.RacesViewModel;
            var postedRaces = rvm.PostedRaces;

            //setup view model
            rvm.AvailableRaces = db.Races.ToList();

            //return everything to model
            ultimate.RacesViewModel = rvm;
            return(ultimate);
        }
        // GET: Student/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            UltimateViewModel ultimate = new UltimateViewModel();
            var rvm = new RacesViewModel();

            rvm.SelectedRaces = new List <Races>();

            Student student = db.Students.Find(id);

            if (student == null)
            {
                return(HttpNotFound());
            }

            //View Bags for Dropdowns
            ViewBag.GendersIdBag          = new SelectList(db.CommonFields.Where(o => o.Category == "Gender"), "Id", "Name");
            ViewBag.DegreeProgramsIdBag   = new SelectList(db.CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name");
            ViewBag.TracksIdBag           = new SelectList(db.CommonFields.Where(o => o.Category == "Track"), "Id", "Name");
            ViewBag.PlansIdBag            = new SelectList(db.CommonFields.Where(o => o.Category == "Plan"), "Id", "Name");
            ViewBag.DegreeStartSemsIdBag  = new SelectList(db.CommonFields.Where(o => o.Category == "Season"), "Id", "Name");
            ViewBag.CitizenshipStatsIdBag = new SelectList(db.CommonFields.Where(o => o.Category == "CitizenshipStatus"), "Id", "Name");
            ViewBag.EmploymentStatsIdBag  = new SelectList(db.CommonFields.Where(o => o.Category == "EmploymentStatus"), "Id", "Name");
            ViewBag.MsctrFacultyIdBag     = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty").OrderBy(o => o.DisplayOrder), "Id", "Name");
            ViewBag.MsctrFacultyIdBag2    = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty" && o.Name != "Other").OrderBy(o => o.DisplayOrder), "Id", "Name");
            ViewBag.Student    = student;
            ViewBag.StudentID  = student.Id;
            ViewBag.Age        = student.Age;
            ViewBag.StudentCVs = db.Files.Where(g => g.CurriculumVitae.StudentID == id);

            //Initialize selectedRaces
            var racesToPost = new List <Races>();

            foreach (var item in student.PersonRaces.Where(x => x.StudentID == id && x.IsSelectedPR.Equals(true)))
            {
                racesToPost.Add(item.Race);
            }

            //setup ultimate view model
            rvm.SelectedRaces       = racesToPost;
            ultimate.RacesViewModel = rvm;
            ultimate.Student        = student;

            return(View(GetRacesInitialModel(ultimate, id)));
        }
        /// <summary>
        /// Initial view model of all races (create view - httpget)
        /// </summary>
        /// <returns>UltimateViewModel</returns>
        private UltimateViewModel GetRacesInitialModel()
        {
            //setup properties
            var model         = new UltimateViewModel();
            var rvm           = new RacesViewModel();
            var selectedRaces = new List <Races>();

            //setup view model
            rvm.AvailableRaces = RaceRepository.GetAll().ToList();
            rvm.SelectedRaces  = selectedRaces;

            //return everything to model
            model.RacesViewModel = rvm;
            return(model);
        }
        // GET: Student/Create
        public ActionResult Create()
        {
            ViewBag.ConcentrationId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Concentration"), "Id", "Name");
            ViewBag.DegreeProgramId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name");
            ViewBag.GenderId        = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Gender"), "Id", "Name");
            //ViewBag.RaceEthnicityId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Race/Ethnicity"), "Id", "Name");
            ViewBag.RaceEthnicity = new SelectList(db.Graduate_Races, "Id", "Name");
            ViewBag.TrackId       = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Track"), "Id", "Name");
            ViewBag.DegreeId      = new SelectList(db.Graduate_PrevDegree, "Id", "Title");

            UltimateViewModel ultimate = new UltimateViewModel();
            RacesViewModel    rvm      = ultimate.Races_ViewModel;

            rvm.AvailableRaces = db.Graduate_Races.ToList();
            rvm.SelectedRaces  = new List <Graduate_Races>();
            rvm.PostedRaces    = new PostedRaces {
                RaceIDs = new string[0]
            };

            //AddRaceVM addRaceModel = new AddRaceVM();
            //var allRaces = db.Graduate_Races.ToList();
            //var checkBoxListItems = new List<CheckBoxListItem>();
            //foreach (var race in allRaces)
            //{
            //    checkBoxListItems.Add(new CheckBoxListItem()
            //    {
            //        ID = race.Id,
            //        Display = race.Name,
            //        IsChecked = false //On the add view, no races are selected by default
            //    });
            //}
            //addRaceModel.Races = checkBoxListItems;
            //ultimate.AddRace_ViewModel = addRaceModel;

            ultimate.Races_ViewModel = rvm;

            return(View(ultimate));
        }
 public ActionResult Ultimate(UltimateViewModel model = null)
 {
     return(this.View(model ?? new UltimateViewModel()));
 }
        public ActionResult Create(/*[Bind(Include = "Id,StudentNumber,FirstName,MiddleName,LastName,SchoolEmail,OtherEmail,Phone,GenderId,DegreeId,RaceOther,DegreeProgramId,ConcentrationId,TrackId,DegreeStart,DegreeEnd")]*/ UltimateViewModel ultimate)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    db.Graduate_Student.Add(ultimate.Graduate_Student_Model);
                    db.SaveChanges();
                }

                catch (DbEntityValidationException ex)
                {
                    foreach (var entityValidationErrors in ex.EntityValidationErrors)
                    {
                        foreach (var validationError in entityValidationErrors.ValidationErrors)
                        {
                            Response.Write("Property: " + validationError.PropertyName + "Error: " + validationError.ErrorMessage);
                            Response.Write("<script>alert('WARNING! THE SYSTEM HAS FOUND A VALIDATION ERROR! Please inspect the validation error!')</script>");
                        }
                    }
                }
                return(RedirectToAction("Index"));
            }


            ViewBag.ConcentrationId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Concentration"), "Id", "Name", ultimate.Graduate_Student_Model.ConcentrationId);
            ViewBag.DegreeProgramId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name", ultimate.Graduate_Student_Model.DegreeProgramId);
            ViewBag.GenderId        = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Gender"), "Id", "Name", ultimate.Graduate_Student_Model.GenderId);
            //ViewBag.RaceEthnicityId = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Race/Ethnicity"), "Id", "Name", graduate_Student.RaceEthnicityId);
            ViewBag.RaceEthnicity = new SelectList(db.Graduate_Races, "Id", "Name");
            ViewBag.TrackId       = new SelectList(db.Graduate_CommonFields.Where(o => o.Category == "Track"), "Id", "Name", ultimate.Graduate_Student_Model.TrackId);
            ViewBag.DegreeId      = new SelectList(db.Graduate_PrevDegree, "Id", "Title", ultimate.Graduate_Student_Model.DegreeId);


            return(View(ultimate));
        }
        public ActionResult Edit(/*[Bind(Include = "Id,StudentNumber,FirstName,MiddleName,LastName,SchoolEmail,OtherEmail,Phone,GendersId,RaceOther,DegreeProgramsId,TracksId,DegreeStart,DegreeEnd")] Student student*/ UltimateViewModel ultimate, PostedRaces postedRaces)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Entry(ultimate.Student).State = EntityState.Modified;

                    //Initiate postedRaces;
                    postedRaces = ultimate.RacesViewModel.PostedRaces;

                    //Create current/previously-checked race list
                    var currPRList   = db.PersonRaces.Where(s => s.StudentID == ultimate.Student.Id && s.IsSelectedPR.Equals(true)).ToList();
                    var currRaceList = new List <Races>();
                    foreach (var item in currPRList)
                    {
                        currRaceList.Add(item.Race);
                    }
                    //Create new checked race list
                    var newList = new List <Races>();
                    foreach (var item in postedRaces.RaceIDs)
                    {
                        int raceId = Int32.Parse(item);
                        var race   = db.Races.Where(s => s.Id == raceId).ToList().Single();
                        newList.Add(race);
                    }

                    //Iterate through new items; if there are no new items in current list, add them
                    foreach (var nItem in newList)
                    {
                        if (!currRaceList.Contains(nItem))
                        {
                            var personRace = new PersonRaces();
                            int raceId     = nItem.Id;
                            var race       = db.Races.Where(s => s.Id == raceId).ToList().Single();
                            personRace.Student      = ultimate.Student;
                            personRace.Race         = race;
                            personRace.IsSelectedPR = true;
                            db.PersonRaces.Add(personRace);
                            db.SaveChanges();
                        }
                    }

                    //Iterate through the current items; if there are no item in new list, delete them
                    foreach (var cItem in currRaceList)
                    {
                        if (!newList.Contains(cItem))
                        {
                            var race = db.Races.Where(s => s.Id == cItem.Id).ToList().Single();

                            var prEntity = db.PersonRaces.SingleOrDefault(s => s.StudentID == ultimate.Student.Id && s.RaceID == cItem.Id && s.IsSelectedPR.Equals(true));
                            prEntity.IsSelectedPR = false;

                            db.SaveChanges();
                        }
                    }


                    ultimate.RacesViewModel.SelectedRaces = newList;

                    db.SaveChanges();
                    return(RedirectToAction("Edit", "Student", new { id = ultimate.Student.Id }));
                }
            }
            catch (DataException /*dex*/)
            {
                //Log the error (uncomment dex cariable name and ad a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, please see your system administrator.");
            }

            //View Bags for Dropdowns
            ViewBag.GendersIdBag          = new SelectList(db.CommonFields.Where(o => o.Category == "Gender"), "Id", "Name");
            ViewBag.DegreeProgramsIdBag   = new SelectList(db.CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name");
            ViewBag.DegreeProgramsIdBag   = new SelectList(db.CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name");
            ViewBag.TracksIdBag           = new SelectList(db.CommonFields.Where(o => o.Category == "Track"), "Id", "Name");
            ViewBag.DegreeStartSemsIdBag  = new SelectList(db.CommonFields.Where(o => o.Category == "Season"), "Id", "Name");
            ViewBag.CitizenshipStatsIdBag = new SelectList(db.CommonFields.Where(o => o.Category == "CitizenshipStatus"), "Id", "Name");
            ViewBag.MsctrFacultyIdBag     = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty").OrderBy(o => o.DisplayOrder), "Id", "Name");
            ViewBag.MsctrFacultyIdBag2    = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty" && o.Name == "Other").OrderBy(o => o.DisplayOrder), "Id", "Name");

            return(View(GetRacesModel(ultimate, postedRaces)));
        }
        public ActionResult Create(/*[Bind(Include = "StudentNumber,FirstName,MiddleName,LastName,SchoolEmail,OtherEmail,Phone,GendersId,RaceOther,DegreeProgramsId,TracksId,DegreeStart,DegreeEnd")] Student student,*/ UltimateViewModel ultimate)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //Add recorded student
                    db.Students.Add(ultimate.Student);

                    ultimate.RacesViewModel.AvailableRaces = db.Races.ToList();

                    //For current student, add to personRaceTable, student id number and postedRace number
                    foreach (var item in ultimate.RacesViewModel.PostedRaces.RaceIDs)
                    {
                        var personRace = new PersonRaces();
                        int raceId     = Int32.Parse(item);
                        var race       = db.Races.Where(s => s.Id == raceId).ToList().Single();
                        personRace.Student      = ultimate.Student;
                        personRace.Race         = race;
                        personRace.IsSelectedPR = true;
                        db.PersonRaces.Add(personRace);
                        db.SaveChanges();
                    }
                    db.SaveChanges();
                    return(RedirectToAction("Edit", "Student", new { id = ultimate.Student.Id }));
                    //return RedirectToAction("Index");
                }
            }
            catch (DataException /*dex*/)
            {
                //Log the error (uncomment dex cariable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, please see your system administrator.");
            }

            //View Bags for Dropdowns
            ViewBag.GendersIdBag          = new SelectList(db.CommonFields.Where(o => o.Category == "Gender"), "Id", "Name");
            ViewBag.DegreeProgramsIdBag   = new SelectList(db.CommonFields.Where(o => o.Category == "DegreeProgram"), "Id", "Name");
            ViewBag.TracksIdBag           = new SelectList(db.CommonFields.Where(o => o.Category == "Track"), "Id", "Name");
            ViewBag.PlansIdBag            = new SelectList(db.CommonFields.Where(o => o.Category == "Plan"), "Id", "Name");
            ViewBag.DegreeStartSemsIdBag  = new SelectList(db.CommonFields.Where(o => o.Category == "Season"), "Id", "Name");
            ViewBag.CitizenshipStatsIdBag = new SelectList(db.CommonFields.Where(o => o.Category == "CitizenshipStatus"), "Id", "Name");
            ViewBag.EmploymentStatsIdBag  = new SelectList(db.CommonFields.Where(o => o.Category == "EmploymentStatus"), "Id", "Name");
            ViewBag.MsctrFacultyIdBag     = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty").OrderBy(o => o.DisplayOrder), "Id", "Name");
            ViewBag.MsctrFacultyIdBag2    = new SelectList(db.CommonFields.Where(o => o.Category == "MsctrFaculty" && o.Name != "Other").OrderBy(o => o.DisplayOrder), "Id", "Name");


            return(View(GetRacesModel(ultimate)));
        }