Files
NateMan/nateman/templates/klausuren/edit.html.j2
T

330 lines
11 KiB
Django/Jinja
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{#
NateMan Nachschreibtermin-Manager
templates/klausuren/edit.html.j2
Copyright © 2020 Niklas Elsbrock
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-#}
{% extends 'base.html.j2' %}
{% block title %}
Klausur: {{ klausur.kursname }}
({{ macros.date(klausur.date, tag=false) }}; {{ klausur.lehrer.kuerzel }}, {{ klausur.stufe.name }})
{% endblock %}
{% block header %}
Klausur: {{ klausur.kursname }}
({{ macros.date(klausur.date) }}; {{ klausur.lehrer.kuerzel }}, {{ klausur.stufe.name }})
{% endblock %}
{# klausur #}
{# kt_list: Liste aller Klausurteilnahmen dieser Klausur #}
{# not_in_klausur_list: Liste aller Schüler dieser Stufe, die nicht in dieser Klausur sind #}
{% set lehrer_can_access = g.lehrer.can_access(klausur.stufe) %}
{% set is_bygone = klausur.is_bygone() %}
{% set no_edit = (klausur.edited or not is_bygone) and not lehrer_can_access %}
{% block js_body_end %}
var schuelerCBs = document.getElementsByClassName("schueler-cb");
for (scb of schuelerCBs) {
scb.onchange = function () {
if (this.checked) {
this.parentNode.classList.add("marked");
} else {
this.parentNode.classList.remove("marked");
}
}
// beim Laden der Seite einmal ausführen
scb.onchange();
}
{% if not no_edit %}
var noneVersaeumtCB = document.getElementById("none-versaeumt");
noneVersaeumtCB.onchange = function () {
for (scb of schuelerCBs) {
scb.disabled = this.checked;
if (this.checked) {
scb.checked = false;
scb.onchange();
}
}
};
// beim Laden der Seite einmal ausführen
noneVersaeumtCB.onchange();
{% if lehrer_can_access %}
var laengeInput = document.getElementById("laenge-input");
var flagAsEditedCb = document.getElementById("flag-as-edited-cb");
flagAsEditedCb.onchange = function () {
laengeInput.required = this.checked;
}
// beim Laden der Seite einmal ausführen
flagAsEditedCb.onchange();
{% endif %}
var editSubmit = document.getElementById("edit-submit");
editSubmit.onclick = function () {
if (!noneVersaeumtCB.checked) {
var ok = false;
for (scb of schuelerCBs) {
if (scb.checked) {
ok = true;
break;
}
}
if (!ok {% if lehrer_can_access %} && flagAsEditedCb.checked {% endif %}) {
alert("Bitte wählen Sie etwas aus.");
return false;
}
}
{% if not lehrer_can_access %}
return confirm("Wollen Sie wirklich speichern?\nSie können die Klausur danach nicht mehr bearbeiten.");
{% else %}
return true;
{% endif %}
};
var selectNode = document.getElementById("added-schueler");
var addNewKoopSchuelerFormNode = document.getElementById("add-new-schueler-form");
var nksNachnameInputNode = document.getElementById("new-schueler-nachname-input");
var nksVornameInputNode = document.getElementById("new-schueler-vorname-input");
selectNode.onchange = function() {
if (selectNode.value === "new-schueler") {
addNewKoopSchuelerFormNode.style.display = "";
nksNachnameInputNode.required = true;
nksVornameInputNode.required = true;
} else {
addNewKoopSchuelerFormNode.style.display = "none";
nksNachnameInputNode.required = false;
nksVornameInputNode.required = false;
}
};
// beim Laden der Seite einmal ausführen
selectNode.onchange();
{% endif %}
{% if lehrer_can_access %}
var new_startperiod_input = document.getElementById('new-startperiod-input');
var new_endperiod_input = document.getElementById('new-endperiod-input');
new_startperiod_input.onchange = function () {
new_endperiod_input.min = parseInt(new_startperiod_input.value);
}
// beim Laden der Seite einmal ausführen
new_startperiod_input.onchange();
{% endif %}
{% endblock %}
{% block content %}
{% if not is_bygone %}
<p class="warn">Diese Klausur hat noch nicht stattgefunden.</p>
{% endif %}
{% if klausur.edited %}
<p class="warn">Diese Klausur wurde bereits bearbeitet.</p>
{% endif %}
<p class="description">
{{ macros.zeitraum(klausur) }} Stunde;
{{ Klausurteilnahme.query.filter_by(klausur_id=klausur.id).count() }} Schüler
</p>
<form method="post">
<input type="hidden" name="action" value="edit">
<p>
<label>
Länge der Klausur:
<input type="number" name="laenge" id="laenge-input" class="small" min="0" max="2147483647"
{% if klausur.laenge is not none %} value="{{ klausur.laenge }}" {% endif %}
{% if not lehrer_can_access %} required {% endif %}>
Minuten
</label>
</p>
{% if not no_edit %}
<p>
Setzen Sie ein Häkchen bei allen Schülern, die die Klausur versäumt haben.<br>
Klicken Sie zum Bestätigen auf 'Speichern'.
</p>
{% endif %}
<p>
<label>
<input type="checkbox" id="none-versaeumt" {% if no_edit %} disabled {% endif %}
{%
if klausur.edited and Klausurteilnahme.query.filter_by(klausur=klausur).filter_by(versaeumt=True).count() == 0
%}
checked
{% endif %}>
<b>kein</b> Schüler hat versäumt
</label>
</p>
<p id="schueler-list">
{% for kt in kt_list %}
<label class="schueler-cb-container">
<input type="checkbox" name="s_{{ kt.schueler.id }}" id="s_{{ kt.schueler.id }}" class="schueler-cb"
{% if kt.versaeumt %} checked {% endif %} {% if no_edit %} disabled {% endif %}>
{{ kt.schueler.nachname }}, {{ kt.schueler.vorname }}
<span class="detail">
({% if kt.schueler.stammschule is not none %}{{ kt.schueler.stammschule.name }},
{% endif %}{{ kt.schueler.id }})
</span>
</label>
<input type="submit" form="remove-form" name="r_{{ kt.schueler.id }}" class="plain" value="&#xD7;"
title="entfernen" {% if no_edit %} disabled {% endif %}>
<br>
{% endfor %}
</p>
<p>
<label>
Bemerkung:
<input type="text" name="annotation" maxlength="{{ nateman_config['klausuren']['max-annotation-length'] }}"
value="{% if klausur.annotation %}{{ klausur.annotation }}{% endif %}" placeholder="optional"
{% if no_edit %} disabled {% endif %}>
</label>
</p>
{% if lehrer_can_access %}
<p>
<label>
<input type="checkbox" name="flag-as-edited" id="flag-as-edited-cb"
{% if is_bygone %} checked {% endif %}>
als bearbeitet markieren
</label>
</p>
{% endif %}
<p><input type="submit" id="edit-submit" value="Speichern" {% if no_edit %} disabled {% endif %}></p>
</form>
<form id="remove-form" method="post">
<input type="hidden" name="action" value="remove-schueler">
</form>
{% if not no_edit %}
<hr>
<form method="post">
<input type="hidden" name="action" value="add-schueler">
<h3>Schüler hinzufügen:
<select name="added-schueler" id="added-schueler" required>
<option value="" selected disabled>Bitte auswählen</option>
<option value="new-schueler">Neuen Schüler hinzufügen...</option>
{% for schueler in not_in_klausur_list %}
<option value="{{ schueler.id }}">{{ schueler.nachname }}, {{ schueler.vorname }}
({% if schueler.stammschule is not none %}{{ schueler.stammschule.name }}, {% endif %}{{ schueler.id }})
</option>
{% endfor %}
</select>
</h3>
<div id="add-new-schueler-form">
<div class="table-aligned">
<div>
<div><label for="new-schueler-nachname-input">Nachname:</label></div>
<div><input type="text" name="new-schueler-nachname" id="new-schueler-nachname-input"></div>
</div>
<div>
<div><label for="new-schueler-nachname-input">Vorname:</label></div>
<div><input type="text" name="new-schueler-vorname" id="new-schueler-vorname-input"></div>
</div>
<div>
<div><label for="new-schueler-stammschule-select">Stammschule:</label></div>
<div>
<select name="new-schueler-stammschule" id="new-schueler-stammschule-select">
<option value="" selected>(kein Koop-Schüler)</option>
{% for ks in Koopschule.query.all() %}
<option value="{{ ks.kuerzel }}">{{ ks.name }}</option>
{% endfor %}
</select>
</div>
</div>
</div>
</div>
<fieldset>
<label><input type="radio" name="add-to" value="klausur">Hinzufügen zu dieser Klausur</label><br>
<label><input type="radio" name="add-to" value="kurs" checked>Hinzufügen zu allen Klausuren dieses Kurses</label>
</fieldset>
<p><input type="submit" value="Hinzufügen"></p>
</form>
{% if lehrer_can_access %}
<hr>
<h3>Erweiterte Einstellungen</h3>
<form method="post">
<input type="hidden" name="action" value="edit-advanced">
<div class="table-aligned">
<div>
<div><label for="new-lehrer-select">Kurslehrkraft:</label></div>
<div>
<select name="new-lehrer" id="new-lehrer-select">
{% for l in Lehrer.query.order_by(Lehrer.kuerzel).all() %}
<option value="{{ l.id }}" {% if l == klausur.lehrer %}selected{% endif %}>{{ l.kuerzel }}</option>
{% endfor %}
</select>
</div>
</div>
<div>
<div><label for="new-date-input">Klausurdatum:</label></div>
<div>
<input type="date" name="new-date" id="new-date-input"
value="{{ klausur.date.strftime('%Y-%m-%d') }}" required>
</div>
</div>
<div>
<div>Klausurzeitraum:</div>
<div>
<input type="number" name="new-startperiod" id="new-startperiod-input" class="small" min="0"
max="2147483647" value="{{ klausur.startperiod }}" required>{#
#}. bis
<input type="number" name="new-endperiod" id="new-endperiod-input" class="small" min="0" max="2147483647"
value="{{ klausur.endperiod }}" required>{#
#}. Stunde
</div>
</div>
</div>
<p><input type="submit" value="Speichern"></p>
</form>
<form method="post">
<input type="hidden" name="action" value="delete">
<p>
<input type="submit" value="Diese Klausur löschen"
onclick="return confirm('Soll diese Klausur wirklich gelöscht werden?')">
</p>
</form>
{% endif %}
{% endif %}
{% endblock %}