From 7b9761d37b61d327994ad0818f51b3850ca3a4c8 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Thu, 30 Jun 2022 17:29:52 +0200 Subject: [PATCH] Fix checkThenSetFinalPartMark --- advlabdb/models.py | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/advlabdb/models.py b/advlabdb/models.py index 2340e63..80cc2a4 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -95,6 +95,9 @@ class PartStudent(db.Model): super().__init__(student=student, part=part, group=group) def checkThenSetFinalPartMark(self): + """ + Return True if final_part_mark changed, False otherwise. + """ finalWeightingSum = 0 finalMark = 0 groupExperiments = [] @@ -102,7 +105,16 @@ class PartStudent(db.Model): for experimentMark in self.experiment_marks: if None in (experimentMark.oral_mark, experimentMark.protocol_mark): # Not all marks are set! - return + try: + self.final_part_mark = None + + db.session.commit() + return True + except Exception as ex: + flash(str(ex), "error") + + db.session.rollback() + return False groupExperiment = experimentMark.group_experiment groupExperiments.append(groupExperiment) @@ -116,7 +128,7 @@ class PartStudent(db.Model): if set(groupExperiments) != set(self.group.group_experiments): flash(f"{self} does not have an experiment mark for every group experiment in his group!", "warning") - return + return False oldFinalPartMark = self.final_part_mark @@ -128,17 +140,21 @@ class PartStudent(db.Model): flash(str(ex), "error") db.session.rollback() - else: - if current_user.has_role("admin"): - if oldFinalPartMark != self.final_part_mark: - category = "danger" if oldFinalPartMark and oldFinalPartMark > self.final_part_mark else "info" + return False - flash( - f"Final part mark changed for {self} from {oldFinalPartMark} to {self.final_part_mark}.", - category, - ) - else: - flash(f"Final part mark did not change for {self} from {oldFinalPartMark}.", "warning") + # Inform admin about what changed + if current_user.has_role("admin"): + if oldFinalPartMark != self.final_part_mark: + category = "danger" if oldFinalPartMark and oldFinalPartMark > self.final_part_mark else "info" + + flash( + f"Final part mark changed for {self} from {oldFinalPartMark} to {self.final_part_mark}.", + category, + ) + else: + flash(f"Final part mark did not change for {self} from {oldFinalPartMark}.", "warning") + + return True class Group(db.Model):