Add per-part true/false breakdown to exam review summary for enhanced clarity

This commit is contained in:
Ross
2025-11-10 13:05:04 +00:00
parent 66899b54bd
commit f3a0a9fd8a
3 changed files with 136 additions and 4 deletions
@@ -25,7 +25,61 @@
{% else %}
<strong>Respondent {{ forloop.counter }}</strong>
{% endif %}
<div>Answer: <strong>{{ ua.answer }}</strong></div>
<div class="mt-1">Answer:
<div class="d-flex gap-1 mt-1">
{# Show parts A-E as coloured badges indicating correctness #}
<div class="d-flex align-items-center">
<span class="me-1 small text-muted">A</span>
{% if ua.a is None %}
<span class="badge bg-light text-muted">N/A</span>
{% elif ua.a == question.a_answer %}
<span class="badge bg-success">{{ ua.a|yesno:"T,F" }}</span>
{% else %}
<span class="badge bg-danger">{{ ua.a|yesno:"T,F" }}</span>
{% endif %}
</div>
<div class="d-flex align-items-center">
<span class="me-1 small text-muted">B</span>
{% if ua.b is None %}
<span class="badge bg-light text-muted">N/A</span>
{% elif ua.b == question.b_answer %}
<span class="badge bg-success">{{ ua.b|yesno:"T,F" }}</span>
{% else %}
<span class="badge bg-danger">{{ ua.b|yesno:"T,F" }}</span>
{% endif %}
</div>
<div class="d-flex align-items-center">
<span class="me-1 small text-muted">C</span>
{% if ua.c is None %}
<span class="badge bg-light text-muted">N/A</span>
{% elif ua.c == question.c_answer %}
<span class="badge bg-success">{{ ua.c|yesno:"T,F" }}</span>
{% else %}
<span class="badge bg-danger">{{ ua.c|yesno:"T,F" }}</span>
{% endif %}
</div>
<div class="d-flex align-items-center">
<span class="me-1 small text-muted">D</span>
{% if ua.d is None %}
<span class="badge bg-light text-muted">N/A</span>
{% elif ua.d == question.d_answer %}
<span class="badge bg-success">{{ ua.d|yesno:"T,F" }}</span>
{% else %}
<span class="badge bg-danger">{{ ua.d|yesno:"T,F" }}</span>
{% endif %}
</div>
<div class="d-flex align-items-center">
<span class="me-1 small text-muted">E</span>
{% if ua.e is None %}
<span class="badge bg-light text-muted">N/A</span>
{% elif ua.e == question.e_answer %}
<span class="badge bg-success">{{ ua.e|yesno:"T,F" }}</span>
{% else %}
<span class="badge bg-danger">{{ ua.e|yesno:"T,F" }}</span>
{% endif %}
</div>
</div>
</div>
{% if ua.created_date %}
<div class="small text-muted">Answered: {{ ua.created_date }}</div>
{% endif %}
@@ -2,6 +2,23 @@
<div id="physics-response-summary-content">
{% if exam_response_total %}
<div class="small text-muted mb-2">Total responses: {{ exam_response_total }}</div>
{# Per-part TF breakdown (A-E) #}
{% if per_part_stats %}
<div class="row mb-3">
{% for part in per_part_stats %}
<div class="col-md-2">
<div class="card">
<div class="card-body p-2 text-center">
<div class="small text-muted">{{ part.part|upper }}</div>
<div class="h5 mb-0">{{ part.true_count }} / {{ part.total }}</div>
<div class="small text-muted">True: {{ part.pct_true }}%</div>
<div class="small text-muted">Correct: {{ part.correct_pct }}%</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
<div class="row mb-2">
<div class="col-auto">Correct:</div>
<div class="col">
@@ -18,7 +35,7 @@
<div class="list-group mb-2">
{# Render top-level answer breakdown from exam_response_counts and pcts #}
{% for key, count in exam_response_counts.items %}
{% for key, count in exam_response_items %}
<div class="list-group-item">
<div class="d-flex w-100 justify-content-between align-items-center">
<div>{{ key }}</div>