示例#1
0
        public ActionResult <string> GetStudentsEnrolledToSubject(string id)
        {
            string semester = SemesterManager.GetCurrentSemester();
            var    students = _studentService.GetStudentsAttendedToSubject(id, semester);

            return(Ok(students));
        }
        public IEnumerable<StudentListItemDTO> GetStudentFromStudyGroupSearch(StudyGroupSearchDTO searchParams, string loggedInUserId)
        {
            if (loggedInUserId == null || !Guid.TryParse(loggedInUserId, out Guid userguid))
                throw new ParameterException("user ID is invalid");
            if (searchParams == null || searchParams.CourseID == null)
                throw new ParameterException("Search parameters cannot be null");

            IEnumerable<Student> filteredStudents = new List<Student>();
            var currentSemester = SemesterManager.GetCurrentSemester();

            if (searchParams.IsHavingOtherCourseInCommonCurrently == true)
            {
                filteredStudents = _studentRepository.GetStudentsHavingCommonPracticalCoursesInCurrentSemester(loggedInUserId, searchParams.CourseID, currentSemester);
            }
            else
            {
                filteredStudents = _studentRepository.GetStudentsAttendingToCourseInCurrentSemester(loggedInUserId, searchParams.CourseID, currentSemester);
            }
            if (searchParams.IsSameCompletedSemesters && filteredStudents.Count() > 0)
            {
                //same completed semesters +-1            
                int userSemesterCnt = _studentRepository.GetStudentSemesterCount(loggedInUserId);
                var filteredOutStudents = new List<Student>();
                foreach (var stud in filteredStudents)
                {
                    int semesterCnt = _studentRepository.GetStudentSemesterCount(stud.UserID);
                    if (Math.Abs(userSemesterCnt - semesterCnt) > 1)
                    {
                        filteredOutStudents.Add(stud);
                    }
                }
                filteredStudents = filteredStudents.Where(x => !filteredOutStudents.Select(y => y.UserID).Contains(x.UserID));
            }
            if (searchParams.IsSameGradeAverage && filteredStudents.Count() > 0)
            {
                //same avg +-0.5
                double userGradeAvg = _studentRepository.GetStudentGradeAverage(loggedInUserId);
                var filteredOutStudents = new List<Student>();
                foreach (var stud in filteredStudents)
                {
                    double currStudAvg = _studentRepository.GetStudentGradeAverage(stud.UserID);
                    if (Math.Abs(currStudAvg - userGradeAvg) > 0.5)
                    {
                        filteredOutStudents.Add(stud);
                    }
                }
                filteredStudents = filteredStudents.Where(x => !filteredOutStudents.Select(y => y.UserID).Contains(x.UserID));
            }

            var filteredStudentListDtos = filteredStudents.Select(x => MapStudent.MapStudentDBModelToStudentListItemDTO(x));
            return filteredStudentListDtos;

        }
        public IEnumerable <GeneralSelectionItem> GetAllLabourCoursesWithSubjectStudentEnrolledToCurrentSemester(string userID)
        {
            if (userID == null || !Guid.TryParse(userID, out Guid userGUID))
            {
                throw new ParameterException("UserID is invalid");
            }
            string currentSemester       = SemesterManager.GetCurrentSemester();
            var    subjects              = _courseRepository.FindLabourCoursesWithSubjectStudentCurrentlyEnrolledTo(userID, currentSemester);
            var    subjectSelectionItems = subjects.Select(x => MapCourse.MapCourseProjectionToGeneralSelectionItem(x));

            return(subjectSelectionItems);
        }
        public IEnumerable<StudentListItemDTO> GetStudentFromStudyBuddySearch(StudyBuddySearchDTO searchParams, string loggedInUserId)
        {
            if (searchParams == null)
                throw new ParameterException("Search parameters cannot be null");
            if (searchParams.GoodInDiscipline < 0 || searchParams.GoodInDiscipline > Enum.GetValues(typeof(SubjectType)).Length)
                throw new ParameterException("Discipline value is invalid");
            if (searchParams.ComletedWithGrade < 0 || searchParams.ComletedWithGrade > 5)
                throw new ParameterException("Grade value is invalid");
            if (searchParams.SubjectID != "null" && !Guid.TryParse(searchParams.SubjectID, out Guid guid))
                throw new ParameterException("Subject ID is invalid");
            if (searchParams.IsAlreadyCompleted && searchParams.IsCurrentlyEnrolledTo)
                throw new ParameterException("Search parameters are invalid, already completed and currently enrolled to cant have true value at the same time.");

            List<Student> results = new List<Student>();

            if (!(searchParams.SubjectID == null && searchParams.GoodInDiscipline == 0))
            {
                if (searchParams.SubjectID != null)
                {
                    if (!searchParams.IsAlreadyCompleted && !searchParams.IsCurrentlyEnrolledTo && !searchParams.IsCommonCourse)
                        results = _studentRepository.GetStudentsEnrolledToSubject(searchParams.SubjectID).ToList();

                    string currentSemester = SemesterManager.GetCurrentSemester();

                    if (searchParams.IsCommonCourse)
                    {
                        results = _studentRepository.GetStudentsEnrolledToSubjectAndHavingCurrentlyCommonCourse(loggedInUserId, searchParams.SubjectID, currentSemester).ToList();
                    }

                    if (searchParams.IsCurrentlyEnrolledTo)
                    {
                        if (results.Count != 0)
                        {
                            results = GetStudentsEnrolledToSubjectCurrently(searchParams.IsAttendingToAnotherTeacher, loggedInUserId, currentSemester, searchParams.SubjectID, results);
                        }
                        else if (searchParams.IsAttendingToAnotherTeacher)
                            results = _studentRepository.GetStudentsCurrentlyEnrolledToSubjectWithStudentButHavingAnotherCurseTeacher(loggedInUserId, searchParams.SubjectID, currentSemester).ToList();
                        else
                            results = _studentRepository.GetStudentsEnrolledToSubjectInSemester(searchParams.SubjectID, currentSemester).ToList();
                    }
                    if (searchParams.IsAlreadyCompleted)
                    {
                        if (results.Count != 0)
                        {
                            results = GetStudentsAlreadyCompletedSubjectFromStudentList(searchParams.ComletedWithGrade, searchParams.SubjectID, results);
                        }
                        else if (searchParams.ComletedWithGrade != 0)
                            results = _studentRepository.GetStudentsCompletedSubjectWithGrade(searchParams.SubjectID, searchParams.ComletedWithGrade).ToList();
                        else
                            results = _studentRepository.GetStudentsCompletedSubject(searchParams.SubjectID).ToList();
                    }

                }
                if (searchParams.GoodInDiscipline != 0)
                {
                    double betterThanAvg = 3.5;
                    if (results.Count() != 0)
                        results = GetStudentsGoodInDisciplineFromStudentList(results, searchParams.GoodInDiscipline, betterThanAvg);
                    else
                        results = _studentRepository.GetStudentsGoodInDiscipline(searchParams.GoodInDiscipline, betterThanAvg).ToList();
                }


            }
            return results.Select(x => MapStudent.MapStudentDBModelToStudentListItemDTO(x));
        }
示例#5
0
        private void ProcessNeptunExports(Student student, IFormFile gradeBook, IFormFile courses)
        {
            //store file
            string courseServerPath    = StoreFile(courses, "Exports");
            string gradebookServerPath = StoreFile(gradeBook, "Exports");
            string thisSemester        = SemesterManager.GetCurrentSemester();

            //TODO: execute these parallel
            //process subjects
            var gradebookExports = CSVProcesser.ProcessCSV <GradeBookExportModel>(gradebookServerPath);
            var createSubjects   = GetNonExistingSubjectsFromExport(gradebookExports);

            //process course
            var courseExports = CSVProcesser.ProcessCSV <CourseExportModel>(courseServerPath);
            var createCourses = GetNonExistingCoursesFromExport(courseExports, thisSemester);

            //process teachers
            var createTeachers = GetNonExistingTeachersFromExport(courseExports);

            //write all to db if no error
            var subjectsNewlyCreated = new List <Subject>();

            // todo: create list of nodes in neo4j level
            foreach (var sub in createSubjects)
            {
                subjectsNewlyCreated.Add(subjectRepository.Create(sub));
            }

            var teachersNewlyCreated = new List <Teacher>();

            foreach (var teacher in createTeachers)
            {
                teachersNewlyCreated.Add(teacherRepository.Create(teacher));
            }

            //create relationships between nodes:
            //course-subject :BELONGS_TO
            foreach (var crs in createCourses)
            {
                courseRepository.CreateCourseBelongingToSubject(crs.Course, crs.SubjectCode);
            }

            //Teacher-course :TEACHES
            foreach (var courseExport in courseExports)
            {
                teacherRepository.CreateTeachesRelationshipWithCourseParams(courseExport.SubjectCode, courseExport.CourseCode, thisSemester, courseExport.TeacherName);
            }

            //Student-course :ATTENDS
            foreach (var cExp in courseExports)
            {
                var  s        = courseRepository.GetCourseWithSubject(cExp.CourseCode, cExp.SubjectCode, thisSemester);
                Guid courseID = s.CourseID;
                studentRepository.CreateAttendsToRelationShipWithCourse(Guid.Parse(student.UserID), courseID);
            }

            //Student-subject :ENROLLED_TO {grade: x}
            foreach (var item in gradebookExports)
            {
                Guid subjectID = Guid.Parse(subjectRepository.FindSubjectBySubjectCode(item.SubjectCode).SubjectID);
                var  grade     = item.GetGrade();
                if (grade == null)
                {
                    studentRepository.CreateEnrolledToRelationShipWithSubject(Guid.Parse(student.UserID), subjectID, item.Semester);
                }
                else
                {
                    studentRepository.CreateEnrolledToRelationShipWithSubjectAndGrade(Guid.Parse(student.UserID), subjectID, item.Semester, (int)grade);
                }
            }

            Console.WriteLine();
        }