From 07951b83e2a15d4eaccf93931a2335e0dd7b7d3c Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sat, 20 Dec 2014 21:39:47 -0600
Subject: [PATCH] Only save grade change when grade actually changed

---
 course/flow.py | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/course/flow.py b/course/flow.py
index 33428115..72877c42 100644
--- a/course/flow.py
+++ b/course/flow.py
@@ -504,7 +504,28 @@ def grade_flow_session(fctx, flow_session, current_access_rule,
         # creator left as NULL
         gchange.flow_session = flow_session
         gchange.comment = comment
-        gchange.save()
+
+        previous_grade_changes = list(GradeChange.objects
+                .filter(
+                    opportunity=gchange.opportunity,
+                    participation=gchange.participation,
+                    state=gchange.state,
+                    attempt_id=gchange.attempt_id,
+                    flow_session=gchange.flow_session)
+                .order_by("-grade_time")
+                [:1])
+
+        # only save if modified or no previous grades
+        do_save = True
+        if previous_grade_changes:
+            previous_grade_change, = previous_grade_changes
+            if (previous_grade_change.points == gchange.points
+                    and previous_grade_change.max_points == gchange.max_points
+                    and previous_grade_change.comment == gchange.comment):
+                do_save = False
+
+        if do_save:
+            gchange.save()
 
     return grade_info
 
-- 
GitLab