diff --git a/advlabdb/models.py b/advlabdb/models.py index 4895ff8..b3f7fc7 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -573,6 +573,16 @@ class Semester(db.Model): def lastSemester(): return Semester.sortedSemestersStartingWithNewest(limit=1).first() + def num_missing_experiment_marks(self): + return db.session.scalar( + select(func.count()) + .select_from(ExperimentMark) + .join(GroupExperiment) + .join(SemesterExperiment) + .where(SemesterExperiment.semester == self) + .where(ExperimentMark.final_experiment_mark == None) + ) + def set_done(self, next_semester=None): set_next_semester = next_semester is not None @@ -581,6 +591,13 @@ class Semester(db.Model): semester = db.session.get(Semester, id) if semester == self or not semester.done: + num_missing_experiment_marks = self.num_missing_experiment_marks() + if num_missing_experiment_marks > 0: + flash( + f"Semester {semester} was set as done, but it has {num_missing_experiment_marks} missing experiment marks!", + "danger", + ) + semester.done = True if set_next_semester: