mirror of
https://github.com/nelsbrock/NateMan.git
synced 2026-08-14 21:36:49 +02:00
320 lines
11 KiB
Django/Jinja
320 lines
11 KiB
Django/Jinja
{#
|
||
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 und Schülerinnen
|
||
</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" autofocus
|
||
{% if klausur.laenge is not none %} value="{{ klausur.laenge }}" {% endif %}
|
||
{% if not lehrer_can_access %} required {% endif %} {% if no_edit %} disabled {% endif %}>
|
||
Minuten
|
||
</label>
|
||
</p>
|
||
|
||
{% if not no_edit %}
|
||
<p>
|
||
Setzen Sie ein Häkchen bei allen Schülern und Schülerinnen, 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>niemand</b> 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">({{ kt.schueler.id }}{% if kt.schueler.koop %}, Koop{% endif %})</span>
|
||
</label>
|
||
<input type="submit" form="remove-form" name="r_{{ kt.schueler.id }}" class="plain" value="×"
|
||
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/Schülerin hinzufügen:
|
||
<select name="added-schueler" id="added-schueler" required>
|
||
<option value="" selected disabled>Bitte auswählen</option>
|
||
<option value="new-schueler">Neu anlegen...</option>
|
||
{% for schueler in not_in_klausur_list %}
|
||
<option value="{{ schueler.id }}">{{ schueler.nachname }}, {{ schueler.vorname }}
|
||
({{ schueler.id }}{% if schueler.koop %}, Koop{% endif %})
|
||
</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-koop-cb">Koop:</label></div>
|
||
<div><input type="checkbox" name="new-schueler-koop" id="new-schueler-koop-cb"></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" aria-label="erste Stunde"
|
||
class="small" min="0" max="2147483647" value="{{ klausur.startperiod }}" required>{#
|
||
#}. bis
|
||
<input type="number" name="new-endperiod" id="new-endperiod-input" class="small" aria-label="letzte Stunde"
|
||
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 %}
|