diff --git a/generic/models.py b/generic/models.py index 81d747cf..f210aaff 100644 --- a/generic/models.py +++ b/generic/models.py @@ -992,6 +992,12 @@ class ExamBase(ExamOrCollectionGenericBase): else: return False + def get_user_users_with_scores(self): + user_ids = [i[2:] for i in self.user_scores if i.startswith("u/")] + + return User.objects.filter(pk__in=user_ids) + + def generate_user_report(self, user): exam_text = [f"Candidate {user.first_name} [{user.email}]"] diff --git a/generic/templates/generic/exam_report_email_status.html b/generic/templates/generic/exam_report_email_status.html index d8a9873d..ad0387f5 100644 --- a/generic/templates/generic/exam_report_email_status.html +++ b/generic/templates/generic/exam_report_email_status.html @@ -1,16 +1,35 @@ \ No newline at end of file diff --git a/generic/templates/generic/exam_scores_base.html b/generic/templates/generic/exam_scores_base.html index a7a25559..e930a88e 100644 --- a/generic/templates/generic/exam_scores_base.html +++ b/generic/templates/generic/exam_scores_base.html @@ -131,7 +131,10 @@ {% block breakdown %}{% endblock breakdown %} -
+
Email results User results emailed: {{exam.exam_results_emailed|default:"Never"}}
+ hx-trigger="click" + hx-target="#user-details">Refresh email status

Note: currently only works with registered users

diff --git a/generic/views.py b/generic/views.py index 10e02261..0c2b30c1 100644 --- a/generic/views.py +++ b/generic/views.py @@ -374,7 +374,7 @@ class ExamViews(View, LoginRequiredMixin): question_type, normalise_score=None, ): - self.Exam = exam + self.Exam: ExamBase = exam self.Question = question self.Answer = answer self.UserAnswer = cid_user_answer @@ -720,11 +720,11 @@ class ExamViews(View, LoginRequiredMixin): if not self.check_user_access(request.user, exam_id): raise PermissionDenied - users = [i[2:] for i in exam.user_scores if i.startswith("u/")] + users = exam.get_user_users_with_scores() status = {} - for u in users: - user = User.objects.get(pk=u) + for user in users: + #user = User.objects.get(pk=u) user_exam = exam.get_or_create_cid_user_exam(user_user=user) if user_exam.results_emailed_status: status[user] = json.loads(user_exam.results_emailed_status) @@ -736,6 +736,7 @@ class ExamViews(View, LoginRequiredMixin): "exam": exam, "status": status, "app_name": self.app_name, + "users": users, }, ) return JsonResponse(status) @@ -770,13 +771,13 @@ class ExamViews(View, LoginRequiredMixin): # We only need to send emails to those who have scores # (who should be in exam.user_scores) if users is None: - users = [i[2:] for i in exam.user_scores if i.startswith("u/")] + users = exam.get_user_users_with_scores() time = timezone.now() email_results = {} - for u in users: - user = User.objects.get(pk=u) + for user in users: + #user = User.objects.get(pk=u) user_exam = exam.get_or_create_cid_user_exam(user_user=user) if unsent_only and user_exam.results_emailed_status: