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)); }
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(); }