private void match(String facultyName, List<Preference> preferences, Student student) { //add student as rejected in the db at first FacultyRankList rejected = new FacultyRankList() { EGN = student.EGN, ProgrammeName = CONST_REJECTED + ' ' + facultyName, TotalGrade = 0 }; context.FacultyRankLists.Add(rejected); context.SaveChanges(); try { foreach (Preference preference in preferences) { int quota = queryManager.getQuota(preference.ProgrammeName, (bool)student.Gender); List<FacultyRankList> rankList = queryManager.getRankListData(preference.ProgrammeName, (bool)student.Gender); double minimalGrade = 0; double studentCount = rankList.Count; if (rankList.Count != 0) { minimalGrade = rankList.Min(list => list.TotalGrade); } if (preference.TotalGrade > minimalGrade && studentCount >= quota && ((quota >= 2 && rankList[quota - 2].TotalGrade > minimalGrade) || (quota == 1 && rankList[quota - 1].TotalGrade > minimalGrade) )) { var entries = rankList.Where(entry => entry.TotalGrade == minimalGrade); foreach (FacultyRankList entry in entries) { context.FacultyRankLists.Attach(entry); context.FacultyRankLists.Remove(entry); } context.SaveChanges(); } if ((preference.TotalGrade > 0 && preference.TotalGrade >= minimalGrade) || (preference.TotalGrade < minimalGrade && studentCount < quota)) { FacultyRankList entry = new FacultyRankList() { EGN = preference.EGN, ProgrammeName = preference.ProgrammeName, TotalGrade = preference.TotalGrade }; context.FacultyRankLists.Add(entry); context.FacultyRankLists.Attach(rejected); context.FacultyRankLists.Remove(rejected); context.SaveChanges(); break; } } } catch (Exception e) { context.FacultyRankLists.Attach(rejected); context.FacultyRankLists.Remove(rejected); context.SaveChanges(); throw e; } }
public ActionResult Index(String faculty, String programmeName) { //генериране на combobox List<String> l = programmes.Keys.ToList<string>(); l.Insert(0, "Please Select"); SelectList faculties = new SelectList(l); ViewData["faculties"] = faculties; //проверка дали е настъпила дата за обявяване на класиране RankingContext db = new RankingContext(); QueryManager mng = new QueryManager(db); // класиране първи етап - дати DateTime first = Convert.ToDateTime(mng.getCampaignDates().FirstRankingDate); ViewData["isFirstRankingDate"] = false; if (DateTime.Today >= first) { ViewData["isFirstRankingDate"] = true; } ViewData["isFirstRankListPublished"] = false; if (db.Dates.ToList().Last().FirstRankingDate == "true") { ViewData["isFirstRankListPublished"] = true; } // класиране втори етап - дати DateTime second = Convert.ToDateTime(mng.getCampaignDates().SecondRankingDate); ViewData["isSecondRankingDate"] = false; if (DateTime.Today >= second) { ViewData["isSecondRankingDate"] = true; } ViewData["isSecondRankListPublished"] = false; if (db.Dates.ToList().Last().FirstRankingDate == "true") { ViewData["isSecondRankListPublished"] = true; } // класиране трети етап - дати DateTime third = Convert.ToDateTime(mng.getCampaignDates().ThirdRankingDate); ViewData["isThirdRankingDate"] = false; if (DateTime.Today >= third) { ViewData["isThirdRankingDate"] = true; } ViewData["isThirdRankListPublished"] = false; if (db.Dates.ToList().Last().FirstRankingDate == "true") { ViewData["isThirdRankListPublished"] = true; } //вземане на потребителското име на потребителя String user = User.Identity.Name; ViewData["userName"] = user; //проверка кой администратор е влязъл ViewData["mainAdmin"] = false; if (user == "Admin") { ViewData["mainAdmin"] = true; } QueryManager queryManager = new QueryManager(db); List<FacultyRankList> rankList = queryManager.getRankList(programmeName); foreach (var item in rankList) { FacultyRankList rank = new FacultyRankList { ProgrammeName = programmeName, EGN = item.EGN, TotalGrade = item.TotalGrade }; model.Add(rank); } //FacultyRankList f = new FacultyRankList //{ // EGN = "12345678", // ProgrammeName = programmeName, // TotalGrade = 4.5 //}; //model.Add(f); ViewData["result"] = model; return PartialView("_ProgrammeRankListTable", model); }