Versäumnistabelle umstrukturiert

This commit is contained in:
2021-09-24 16:26:55 +02:00
parent de9d2c5373
commit 9b73706521
2 changed files with 49 additions and 32 deletions
+6 -5
View File
@@ -33,19 +33,20 @@ bp = Blueprint("schueler", __name__, url_prefix="/schueler")
def versaeumnisse(): def versaeumnisse():
""" Versäumnisliste (Seite *Versäumnisse*) """ """ Versäumnisliste (Seite *Versäumnisse*) """
if request.method != "POST": if request.method != "POST":
versaeumt_dict: Dict[Stufe, Tuple[List[Klausurteilnahme], List[Klausurteilnahme]]] = {} klausur_dict: Dict[Stufe, Tuple[List[Klausurteilnahme], List[Klausurteilnahme]]] = {}
for stufe in g.lehrer.accessible_stufen(): for stufe in g.lehrer.accessible_stufen():
base_query = Klausurteilnahme.query.join(Schueler).join(Klausur) \ base_query = Klausur.query.join(Klausurteilnahme) \
.filter(Klausurteilnahme.versaeumt) \ .filter(Klausurteilnahme.versaeumt) \
.filter(Klausur.stufe == stufe) \ .filter(Klausur.stufe == stufe) \
.order_by(Schueler.nachname, Schueler.vorname) .group_by(Klausur) \
.order_by(Klausur.date)
versaeumt_dict[stufe] = ( klausur_dict[stufe] = (
base_query.filter(~Klausurteilnahme.nachgeschrieben).all(), base_query.filter(~Klausurteilnahme.nachgeschrieben).all(),
base_query.filter(Klausurteilnahme.nachgeschrieben).all(), base_query.filter(Klausurteilnahme.nachgeschrieben).all(),
) )
return render_template("schueler/versaeumnisse.html.j2", versaeumt_dict=versaeumt_dict) return render_template("schueler/versaeumnisse.html.j2", klausur_dict=klausur_dict)
# ELSE # ELSE
@@ -23,17 +23,17 @@
{% block header %}Versäumnisse{% endblock %} {% block header %}Versäumnisse{% endblock %}
{# {#
versaeumt_dict: Dictinonary mit jeweils eimem Tupel aus zwei Listen aller nicht nachgeschriebenen bzw. klausur_dict: Dictinonary mit jeweils eimem Tupel aus zwei Listen aller Klausuren mit nicht nachgeschriebenen bzw.
nachgeschriebenen versäumten Klausurteilnahmen pro Stufe, auf die der angemeldete Lehrer Zugriff hat nachgeschriebenen versäumten Klausurteilnahmen pro Stufe, auf die der angemeldete Lehrer Zugriff hat
#} #}
{% block content %} {% block content %}
<form method="post"> <form method="post">
{% for stufe, versaeumt_listen in versaeumt_dict.items() %} {% for stufe, klausur_listen in klausur_dict.items() %}
<h3>{{ stufe.name }}</h3> <h3>{{ stufe.name }}</h3>
{% for versaeumt_list in versaeumt_listen %} {% for klausur_list in klausur_listen %}
<h4> <h4>
{% if loop.first %} {% if loop.first %}
noch nicht nachgeschrieben: noch nicht nachgeschrieben:
@@ -41,18 +41,19 @@
bereits nachgeschrieben: bereits nachgeschrieben:
{% endif %} {% endif %}
</h4> </h4>
{% if versaeumt_list|length == 0 %} {% if klausur_list|length == 0 %}
<p>keine</p> <p>keine</p>
{% else %} {% else %}
<table> <table>
<thead> <thead>
<tr> <tr>
<th colspan="6" class="first-in-category">Klausur</th>
<th rowspan="2" class="first-in-category">Schüler/Schülerin</th> <th rowspan="2" class="first-in-category">Schüler/Schülerin</th>
<th colspan="5" class="first-in-category">Klausur</th>
<th colspan="2" class="first-in-category">Status</th> <th colspan="2" class="first-in-category">Status</th>
</tr> </tr>
<tr> <tr>
<th class="first-in-category">Datum</th> <th class="first-in-category">ID</th>
<th>Datum</th>
<th>Kurs</th> <th>Kurs</th>
<th>Lehrkraft</th> <th>Lehrkraft</th>
<th>Länge</th> <th>Länge</th>
@@ -61,28 +62,43 @@
<th>nachgeschrieben</th> <th>nachgeschrieben</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for kt in versaeumt_list %} {% for klausur in klausur_list %}
<tr class="clickable" tabindex="0" data-href="{{ url_for('klausuren.edit', klausur_id=kt.klausur.id) }}"> {% set kt_list = Klausurteilnahme.query.filter_by(klausur=klausur, versaeumt=true).all() %}
<td class="first-in-category">{{ kt.schueler.nachname }}, {{ kt.schueler.vorname }} {% for kt in kt_list %}
<span class="detail">({{ kt.schueler.id }}{% if kt.schueler.koop %}, Koop{% endif %})</span> <tr>
</td> {% if loop.first %}
<td class="first-in-category">{{ macros.date(kt.klausur.date) }}</td> <td rowspan="{{ kt_list|length }}" class="first-in-category">
<td>{{ kt.klausur.kursname }}</td> <a href="{{ url_for('klausuren.edit', klausur_id=klausur.id) }}">
<td>{{ kt.klausur.lehrer.kuerzel }}</td> {{ klausur.id }}
<td>{{ kt.klausur.laenge }}</td> </a>
</td>
<td rowspan="{{ kt_list|length }}">{{ macros.date(klausur.date) }}</td>
<td rowspan="{{ kt_list|length }}">{{ klausur.kursname }}</td>
<td rowspan="{{ kt_list|length }}">{{ klausur.lehrer.kuerzel }}</td>
<td rowspan="{{ kt_list|length }}">{{ klausur.laenge }}</td>
{% if kt.klausur.annotation is not none %}
<td rowspan="{{ kt_list|length }}" class="description">{{ kt.klausur.annotation }}</td>
{% else %}
<td rowspan="{{ kt_list|length }}" class="detail">keine</td>
{% endif %}
{% endif %}
{% if kt.klausur.annotation is not none %} <td class="first-in-category">
<td class="description">{{ kt.klausur.annotation }}</td> {{ kt.schueler.nachname }}, {{ kt.schueler.vorname }}
{% else %} <span class="detail">({{ kt.schueler.id }}{% if kt.schueler.koop %}, Koop{% endif %})</span>
<td class="detail">keine</td> </td>
{% endif %} <td class="first-in-category">
<input type="checkbox" name="a_{{ kt.klausur.id }}:{{ kt.schueler.id }}"
<td class="first-in-category"><input type="checkbox" name="a_{{ kt.klausur.id }}:{{ kt.schueler.id }}" {% if kt.attestiert %}checked{% endif %}>
onclick="event.stopPropagation()" {% if kt.attestiert %}checked{% endif %}></td> </td>
<td><input type="checkbox" name="n_{{ kt.klausur.id }}:{{ kt.schueler.id }}" <td>
onclick="event.stopPropagation()" {% if kt.nachgeschrieben %}checked{% endif %}></td> <input type="checkbox" name="n_{{ kt.klausur.id }}:{{ kt.schueler.id }}"
</tr> {% if kt.nachgeschrieben %}checked{% endif %}>
</td>
</tr>
{% endfor %}
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>