Exemplo n.º 1
0
        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);
        }