High candidates that have submitted results

This commit is contained in:
Ross
2023-01-09 14:04:17 +00:00
parent 822c6c65c0
commit 6f89604d14
4 changed files with 72 additions and 20 deletions
+46 -17
View File
@@ -7,12 +7,8 @@
<ol> <ol>
{% for cid in cid_users %} {% for cid in cid_users %}
<li><a href="{% url 'generic:update_cid' cid.pk %}">{{cid.cid}}</a> [{{cid.passcode}}] {{cid.name}} / <li class="cid-user" data-cid={{cid.cid}}><a href="{% url 'generic:update_cid' cid.pk %}">{{cid.cid}}</a> [{{cid.passcode}}] {{cid.name}} /
Email: {{cid.email}} Email: {{cid.email}}
{% if cid.supervisor %} / Supervisor email: {{cid.supervisor.email}}{% endif %} <br />
Internal candidate: {{cid.internal_candidate}}
{% if cid.login_email_sent %} / Login email sent{% endif %}
{% if cid.results_email_sent %} / Results email sent{% endif %}
</li> </li>
{% endfor %} {% endfor %}
@@ -34,7 +30,7 @@
<ol> <ol>
{% for user in user_users %} {% for user in user_users %}
<li>{{user.username}} <li class="user-user" data-user="{{user.username}}">{{user.username}}
Email: {{user.email}} Email: {{user.email}}
</li> </li>
@@ -51,21 +47,54 @@
{% if user_exam_data %} {% if user_exam_data %}
<div class="card text-white bg-dark"> <div class="card text-white bg-dark">
<h3>Submitted candidates</h3> <details>
<ul> <summary>
{% for user_data in user_exam_data %} <h3>Submitted candidates</h3>
<li> </summary>
CID: {{user_data.cid_user}} / <ul id="submitted-candidates">
User: {{user_data.user_user}} / {% for user_data in user_exam_data %}
Start time: {{user_data.start_time}} / <li data-cid="{{user_data.cid_user}}" data-user="{{user_data.user_user}}">
End time: {{user_data.end_time}} / CID: {{user_data.cid_user}} /
User: {{user_data.user_user}} /
Start time: {{user_data.start_time}} /
End time: {{user_data.end_time}} /
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</details>
</div> </div>
{% endif %} {% endif %}
{% block js %}
<script>
$(document).ready(function() {
// Highlight users that have submitted answers
$("#submitted-candidates li").each(function(n, el) {
console.log(el);
if (el.dataset.cid != "None") {
$(`.cid-user[data-cid=${el.dataset.cid}]`).addClass("submitted")
}
if (el.dataset.user != "None") {
$(`.user-user[data-user=${el.dataset.user}]`).addClass("submitted")
}
});
})
</script>
{% endblock js %}
{% block css %}
<style>
.submitted {
color: green;
}
</style>
{% endblock css %}
+10
View File
@@ -266,5 +266,15 @@ def generic_exam_urls(generic_exam_view: GenericExamViews):
generic_exam_view.exam_user_status, generic_exam_view.exam_user_status,
name="exam_user_status", name="exam_user_status",
), ),
path(
"exam/<int:pk>/user_status/<int:cid>/cid",
generic_exam_view.exam_user_status_cid,
name="exam_user_status_cid",
),
path(
"exam/<int:pk>/user_status/<int:user_id>/user",
generic_exam_view.exam_user_status_user,
name="exam_user_status_user",
),
] ]
return urlpatterns return urlpatterns
+14 -2
View File
@@ -999,14 +999,26 @@ class ExamViews(View, LoginRequiredMixin):
return notes return notes
def exam_user_status(self, request, pk): def exam_user_status_cid(self, request, pk, cid):
return self.exam_user_status(request, pk, cid=cid)
def exam_user_status_user(self, request, pk, user_id):
return self.exam_user_status(request, pk, user_id=user_id)
def exam_user_status(self, request, pk, cid=None, user_id=None):
# TODO: add filtering by user / cid
exam = get_object_or_404(self.Exam, pk=pk) exam = get_object_or_404(self.Exam, pk=pk)
# Restrict just to exam authors # Restrict just to exam authors
if request.user not in exam.author.all(): if request.user not in exam.author.all():
raise PermissionDenied raise PermissionDenied
statuses = exam.exam_user_status.all() if cid is not None:
statuses = exam.exam_user_status.filter(cid_user__cid=cid)
elif user_id is not None:
statuses = exam.exam_user_status.filter(user_user__id=user_id)
else:
statuses = exam.exam_user_status.all()
return render(request, "exam_user_status.html", {"exam": exam, "statuses": statuses}) return render(request, "exam_user_status.html", {"exam": exam, "statuses": statuses})
+2 -1
View File
@@ -1,4 +1,5 @@
import secrets import secrets
from django.conf import settings
from django_tables2 import SingleTableMixin from django_tables2 import SingleTableMixin
from atlas.models import CaseCollection, CidReportAnswer from atlas.models import CaseCollection, CidReportAnswer
@@ -743,4 +744,4 @@ def request_cid_details(request):
cid_user.email_details() cid_user.email_details()
return HttpResponse("Candidate details will be sent to the requested email (if it is found in the system).") return HttpResponse(f"Candidate details will be sent to the requested email (if it is found in the system). If you have not received an email after a few minutes you may need to contact <a href='mailto:{settings.CONTACT_EMAIL}'>{settings.CONTACT_EMAIL}</a>")