mirror of
https://github.com/nelsbrock/NateMan.git
synced 2026-08-14 21:36:49 +02:00
Versäumnistabelle umstrukturiert
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user