a few minor changes
This commit is contained in:
@@ -992,6 +992,12 @@ class ExamBase(ExamOrCollectionGenericBase):
|
|||||||
else:
|
else:
|
||||||
return False
|
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):
|
def generate_user_report(self, user):
|
||||||
exam_text = [f"Candidate {user.first_name} [{user.email}]"]
|
exam_text = [f"Candidate {user.first_name} [{user.email}]"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,35 @@
|
|||||||
<ul>
|
<ul>
|
||||||
|
<h3>Email to send</h3>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Username</th>
|
||||||
|
<th>Supervisor</th>
|
||||||
|
</tr>
|
||||||
|
{% for user in users %}
|
||||||
|
<tr>
|
||||||
|
<td>{{user.username}}</td>
|
||||||
|
<td>{{user.userprofile.supervisor}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
{% for user, status in status.items %}
|
{% for user, status in status.items %}
|
||||||
<li class='{% if status.0 %}text-success{% else %}text-warning{% endif %}'>
|
<li class='{% if status.0 %}text-success{% else %}text-warning{% endif %}'>
|
||||||
{{user.username}} {% if status.0 %}success{% else %}failed [{{status.1}}]{% endif %} ({{status.2}})
|
{{user.username}} {% if status.0 %}success{% else %}failed [{{status.1}}]{% endif %} ({{status.2}})
|
||||||
<button hx-get="{% url exam.app_name|add:':exam_user_report_email' exam_id=exam.pk user_id=user.pk %}"
|
<button hx-get="{% url exam.app_name|add:':exam_user_report_email' exam_id=exam.pk user_id=user.pk %}"
|
||||||
hx-prompt="Enter any additional emails"
|
hx-prompt="Enter any additional emails"
|
||||||
hx-confirm="Are you sure you wish to delete your account?"
|
hx-confirm="Are you sure you wish to resend all emails?"
|
||||||
hx-trigger="click, click from:#resend-all"
|
hx-trigger="click, click from:#resend-all"
|
||||||
>Resend</button>
|
>Resend</button>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
No emails sent.
|
<p>No emails sent.</p>
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
<button id="resend-all">Resend all</button>
|
<button id="resend-all">Resend all</button>
|
||||||
@@ -131,7 +131,10 @@
|
|||||||
|
|
||||||
{% block breakdown %}{% endblock breakdown %}
|
{% block breakdown %}{% endblock breakdown %}
|
||||||
|
|
||||||
<details>
|
<details
|
||||||
|
hx-get="{% url exam.app_name|add:':exam_report_email_status' exam_id=exam.pk %}"
|
||||||
|
hx-trigger="revealed"
|
||||||
|
hx-target="#user-details">
|
||||||
<summary>Email results</summary>
|
<summary>Email results</summary>
|
||||||
User results emailed: {{exam.exam_results_emailed|default:"Never"}}<br/>
|
User results emailed: {{exam.exam_results_emailed|default:"Never"}}<br/>
|
||||||
<button id="email-results-button"
|
<button id="email-results-button"
|
||||||
@@ -149,7 +152,8 @@
|
|||||||
>Email unsent user results</button>
|
>Email unsent user results</button>
|
||||||
<button id="email-results-check-button" title="Check the status of emailed results"
|
<button id="email-results-check-button" title="Check the status of emailed results"
|
||||||
hx-get="{% url exam.app_name|add:':exam_report_email_status' exam_id=exam.pk %}"
|
hx-get="{% url exam.app_name|add:':exam_report_email_status' exam_id=exam.pk %}"
|
||||||
hx-target="#user-details">Check email status</button>
|
hx-trigger="click"
|
||||||
|
hx-target="#user-details">Refresh email status</button>
|
||||||
<p>Note: currently only works with registered users</p>
|
<p>Note: currently only works with registered users</p>
|
||||||
<div id="user-details"></div>
|
<div id="user-details"></div>
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
+8
-7
@@ -374,7 +374,7 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
question_type,
|
question_type,
|
||||||
normalise_score=None,
|
normalise_score=None,
|
||||||
):
|
):
|
||||||
self.Exam = exam
|
self.Exam: ExamBase = exam
|
||||||
self.Question = question
|
self.Question = question
|
||||||
self.Answer = answer
|
self.Answer = answer
|
||||||
self.UserAnswer = cid_user_answer
|
self.UserAnswer = cid_user_answer
|
||||||
@@ -720,11 +720,11 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
if not self.check_user_access(request.user, exam_id):
|
if not self.check_user_access(request.user, exam_id):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
users = [i[2:] for i in exam.user_scores if i.startswith("u/")]
|
users = exam.get_user_users_with_scores()
|
||||||
|
|
||||||
status = {}
|
status = {}
|
||||||
for u in users:
|
for user in users:
|
||||||
user = User.objects.get(pk=u)
|
#user = User.objects.get(pk=u)
|
||||||
user_exam = exam.get_or_create_cid_user_exam(user_user=user)
|
user_exam = exam.get_or_create_cid_user_exam(user_user=user)
|
||||||
if user_exam.results_emailed_status:
|
if user_exam.results_emailed_status:
|
||||||
status[user] = json.loads(user_exam.results_emailed_status)
|
status[user] = json.loads(user_exam.results_emailed_status)
|
||||||
@@ -736,6 +736,7 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
"exam": exam,
|
"exam": exam,
|
||||||
"status": status,
|
"status": status,
|
||||||
"app_name": self.app_name,
|
"app_name": self.app_name,
|
||||||
|
"users": users,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return JsonResponse(status)
|
return JsonResponse(status)
|
||||||
@@ -770,13 +771,13 @@ class ExamViews(View, LoginRequiredMixin):
|
|||||||
# We only need to send emails to those who have scores
|
# We only need to send emails to those who have scores
|
||||||
# (who should be in exam.user_scores)
|
# (who should be in exam.user_scores)
|
||||||
if users is None:
|
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()
|
time = timezone.now()
|
||||||
|
|
||||||
email_results = {}
|
email_results = {}
|
||||||
for u in users:
|
for user in users:
|
||||||
user = User.objects.get(pk=u)
|
#user = User.objects.get(pk=u)
|
||||||
user_exam = exam.get_or_create_cid_user_exam(user_user=user)
|
user_exam = exam.get_or_create_cid_user_exam(user_user=user)
|
||||||
|
|
||||||
if unsent_only and user_exam.results_emailed_status:
|
if unsent_only and user_exam.results_emailed_status:
|
||||||
|
|||||||
Reference in New Issue
Block a user