Skip to content
Snippets Groups Projects
Commit 55df3042 authored by Kevin Thaller's avatar Kevin Thaller
Browse files

add enrollment methods

parent 4f8d3c9b
No related branches found
No related tags found
No related merge requests found
......@@ -4,15 +4,9 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="ce56effb-683b-43e9-9335-7e3aa5d26c29" name="Changes" comment="fix SwitchWindowHelper to work with all event types">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/JpaService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/JpaService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/CourseModificationController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/CourseModificationController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/CoursesOfStudyDetailsController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/CoursesOfStudyDetailsController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/Main.java" afterDir="false" />
<list default="true" id="ce56effb-683b-43e9-9335-7e3aa5d26c29" name="Changes" comment="bug fix no duplicate (multiple) courses in CourseModificationController + CoursesOfStudyDetailsController anymore">
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/StudentCoursesGradesController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/StudentCoursesGradesController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/StudentDetailsController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/gui/StudentDetailsController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/CoursesOfStudy.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/CoursesOfStudy.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/Enrollment.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/Enrollment.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/Student.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/de/thdeg/grademanager/model/Student.java" afterDir="false" />
</list>
......@@ -150,7 +144,14 @@
<option name="project" value="LOCAL" />
<updated>1655652253362</updated>
</task>
<option name="localTasksCounter" value="9" />
<task id="LOCAL-00009" summary="bug fix no duplicate (multiple) courses in CourseModificationController + CoursesOfStudyDetailsController anymore">
<created>1655885226603</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1655885226603</updated>
</task>
<option name="localTasksCounter" value="10" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
......@@ -185,6 +186,7 @@
<MESSAGE value="created new window for student courses and grades" />
<MESSAGE value="add StudentStats Screen + Controller" />
<MESSAGE value="fix SwitchWindowHelper to work with all event types" />
<option name="LAST_COMMIT_MESSAGE" value="fix SwitchWindowHelper to work with all event types" />
<MESSAGE value="bug fix no duplicate (multiple) courses in CourseModificationController + CoursesOfStudyDetailsController anymore" />
<option name="LAST_COMMIT_MESSAGE" value="bug fix no duplicate (multiple) courses in CourseModificationController + CoursesOfStudyDetailsController anymore" />
</component>
</project>
\ No newline at end of file
package de.thdeg.grademanager.gui;
import de.thdeg.grademanager.JpaService;
import de.thdeg.grademanager.model.Course;
import de.thdeg.grademanager.model.Student;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import java.io.IOException;
import java.util.List;
public class StudentCoursesGradesController {
private static Student student;
public static void setStudent(Student student) {
StudentCoursesGradesController.student = student;
}
@FXML
protected ListView<Course> availableCoursesListView;
@FXML
protected ListView<Course> selectedCoursesListView;
@FXML
protected void initialize() {
initEnrollmentsForCoursesOfStudy();
}
private void initEnrollmentsForCoursesOfStudy(){
JpaService jpaService = JpaService.getInstance();
List<Course> courses = jpaService.getCoursesForCoursesOfStudyFromDb(student.getCoursesOfStudy());
Student s = jpaService.getStudentFromDb(student.getId());
jpaService.runInTransaction(entityManager -> {entityManager.detach(s); return null;});
s.clearEnrollmentsOldCoursesOfStudy(s.getCoursesOfStudy());
s.initEnrollments(courses);
jpaService.runInTransaction(entityManager -> {entityManager.merge(s); return null;});
}
@FXML
protected void switchToStudentDetails(ActionEvent event) throws IOException {
StudentDetailsController.setStudent(student);
SwitchWindowHelper.switchTo("Student Details", event);
}
}
package de.thdeg.grademanager.gui;
import de.thdeg.grademanager.JpaService;
import de.thdeg.grademanager.model.Course;
import de.thdeg.grademanager.model.CoursesOfStudy;
import de.thdeg.grademanager.model.Student;
import de.thdeg.grademanager.model.enumeration.Gender;
......@@ -10,8 +11,10 @@ import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import static de.thdeg.grademanager.gui.MainController.coursesOfStudyList;
......@@ -136,7 +139,7 @@ public class StudentDetailsController {
@FXML
protected void assignCoursesOfStudy(ActionEvent event) {
if (coursesOfStudyComboBox.getValue() != null){
if (student != null && coursesOfStudyComboBox.getValue() != null && event.getSource() == coursesOfStudyComboBox){
student.setCoursesOfStudy(coursesOfStudyComboBox.getValue());
JpaService jpaService = JpaService.getInstance();
jpaService.runInTransaction(entityManager -> {entityManager.merge(student); return null;});
......@@ -146,11 +149,13 @@ public class StudentDetailsController {
@FXML
protected void switchToMain(ActionEvent event) throws IOException {
student = null;
SwitchWindowHelper.switchTo("Main", event);
}
@FXML
protected void switchToStudentCoursesGrades(ActionEvent event) throws IOException {
StudentCoursesGradesController.setStudent(student);
SwitchWindowHelper.switchTo("Student Courses and Grades", event);
}
......
......@@ -10,6 +10,7 @@ import java.util.Objects;
public class Enrollment
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
......@@ -22,16 +23,21 @@ public class Enrollment
Course course;
@Column(name = "enrollment_date")
private LocalDateTime enrollmentDate;
private LocalDateTime enrollmentDate = null;
@Column(name = "grade")
private double grade;
private Double grade = null;
public Enrollment()
{
}
public Enrollment(Student student, Course course){
this.student = student;
this.course = course;
}
public Enrollment(Student student, Course course, LocalDateTime enrollmentDate)
{
this.student = student;
......@@ -45,7 +51,7 @@ public class Enrollment
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Enrollment that = (Enrollment) o;
return student == that.student && course == that.course;
return student.getId() == that.student.getId() && course.getId() == that.course.getId();
}
@Override
......
package de.thdeg.grademanager.model;
import de.thdeg.grademanager.interfaces.Calculable;
import de.thdeg.grademanager.model.enumeration.Mark;
import jakarta.persistence.*;
import org.hibernate.annotations.Cascade;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Entity
......@@ -18,7 +24,7 @@ public class Student extends UniversityMember implements Calculable
@Column(name = "semester")
private int semester;
@OneToMany(mappedBy = "student")
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true) // cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Enrollment> enrollments;
@OneToOne(fetch = FetchType.LAZY)
......@@ -94,4 +100,39 @@ public class Student extends UniversityMember implements Calculable
public CoursesOfStudy getCoursesOfStudy(){
return coursesOfStudy;
}
public void initEnrollments(List<Course> courses){
for (Course course: courses) {
System.out.println(course);
enrollments.add(new Enrollment(this, course));
}
}
public Set<Enrollment> getEnrollments(){
return enrollments;
}
public void clearEnrollmentsOldCoursesOfStudy(CoursesOfStudy coursesOfStudy){
List<Enrollment> enrollmentsToRemove = new ArrayList<>();
for (Enrollment enrollment: enrollments){
boolean courseToRemove = true;
for(int i = 0; i < coursesOfStudy.getCourses().size() ; i++){
if(enrollment.course.getId() == coursesOfStudy.getCourses().get(i).getId()){
courseToRemove = false;
break;
}
}
if(courseToRemove){
enrollmentsToRemove.add(enrollment);
}
}
enrollments.removeAll(enrollmentsToRemove);
}
public void rateStudent(Course course, Mark mark){
Enrollment temp = new Enrollment(this, course);
enrollments.remove(temp);
temp.setEnrollmentDate(LocalDateTime.now());
temp.setGrade(mark.getMark());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment