Esempio 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;
            }
        }