@@ -464,7 +464,7 @@ def update_report_statuses(self, submission, queryset):
464
464
controller ._activate_newest_report (submission , queryset , kind = ['INITIAL' ])
465
465
controller ._activate_newest_report (submission , queryset , kind = ['USER_OUTS' ])
466
466
467
- def update_user_results (self , user , problem_instance ):
467
+ def update_user_results (self , user , problem_instance , submission ):
468
468
"""Updates score for problem instance.
469
469
470
470
Usually this method creates instances (if they don't exist) of:
@@ -480,8 +480,19 @@ def update_user_results(self, user, problem_instance):
480
480
) = UserResultForProblem .objects .select_for_update ().get_or_create (
481
481
user = user , problem_instance = problem_instance
482
482
)
483
+ if problem_instance .controller .calculate_score_diff ():
484
+ if created :
485
+ score_before = None
486
+ else :
487
+ score_before = result .score
483
488
problem_instance .controller .update_user_result_for_problem (result )
484
489
result .save ()
490
+ if problem_instance .controller .calculate_score_diff ():
491
+ score_after = result .score
492
+ submission .score_diff = problem_instance .controller .score_diff (
493
+ score_before , score_after
494
+ )
495
+ submission .save ()
485
496
486
497
def validate_submission_form (self , request , problem_instance , form , cleaned_data ):
487
498
return cleaned_data
@@ -660,7 +671,7 @@ def change_submission_kind(self, submission, kind):
660
671
submission .problem_instance .controller .judge (submission , is_rejudge = True )
661
672
if submission .user :
662
673
submission .problem_instance .controller .update_user_results (
663
- submission .user , submission .problem_instance
674
+ submission .user , submission .problem_instance , submission
664
675
)
665
676
if old_kind == 'NORMAL' or kind == 'NORMAL' :
666
677
submission .problem_instance .problem .controller .recalculate_statistics_for_user (
0 commit comments