From f31c4e802f67b94188a5ad72d1c24485e63e6c4a Mon Sep 17 00:00:00 2001 From: Niklas Elsbrock Date: Sun, 8 Aug 2021 21:56:10 +0200 Subject: [PATCH] Koopschulentabelle durch `koop`-Boolean ersetzt --- nateman/__init__.py | 5 +- nateman/assigner.py | 2 +- nateman/blueprints/fileio.py | 2 +- nateman/blueprints/klausuren.py | 14 +- nateman/commands.py | 44 +- nateman/importer.py | 19 +- nateman/models.py | 9 +- nateman/static/img/nateman-erm.svg | 636 ++++++++---------- nateman/templates/klausuren/edit.html.j2 | 18 +- .../templates/schueler/versaeumnisse.html.j2 | 3 +- 10 files changed, 318 insertions(+), 434 deletions(-) diff --git a/nateman/__init__.py b/nateman/__init__.py index a688a42..1652020 100644 --- a/nateman/__init__.py +++ b/nateman/__init__.py @@ -33,7 +33,7 @@ from werkzeug.utils import find_modules, import_string from . import util from .config_manager import config_file_exists, create_config_file, config from .config_manager import read_config_file -from .models import Klausur, Klausurteilnahme, Koopschule, Lehrer, Schueler, Stufe, db +from .models import Klausur, Klausurteilnahme, Lehrer, Schueler, Stufe, db def create_app() -> Flask: @@ -134,8 +134,7 @@ def configure_jinja(app: Flask): Stufe=Stufe, Schueler=Schueler, Lehrer=Lehrer, - Klausur=Klausur, - Koopschule=Koopschule + Klausur=Klausur ) app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True diff --git a/nateman/assigner.py b/nateman/assigner.py index ca82ee6..c4f8c94 100644 --- a/nateman/assigner.py +++ b/nateman/assigner.py @@ -21,7 +21,7 @@ from typing import List def iscoopLk(kurs: List): for k in kurs: - if k.schueler.stammschule is not None: + if k.schueler.koop: return True return False diff --git a/nateman/blueprints/fileio.py b/nateman/blueprints/fileio.py index 4ced6ec..a43cd7a 100644 --- a/nateman/blueprints/fileio.py +++ b/nateman/blueprints/fileio.py @@ -160,4 +160,4 @@ def _del_plan(stufe: Stufe): def _del_koopschueler(): """Löscht alle Koopschüler""" - Schueler.query.filter(Schueler.stammschule != None).delete() + Schueler.query.filter(Schueler.koop).delete() diff --git a/nateman/blueprints/klausuren.py b/nateman/blueprints/klausuren.py index 331b5c2..e4fa101 100644 --- a/nateman/blueprints/klausuren.py +++ b/nateman/blueprints/klausuren.py @@ -25,7 +25,7 @@ from flask import Blueprint, abort, current_app, flash, g, redirect, render_temp from .auth import login_required, beratungslehrer_required from ..config_manager import config -from ..models import Klausur, Klausurteilnahme, Koopschule, Lehrer, Schueler, db, \ +from ..models import Klausur, Klausurteilnahme, Lehrer, Schueler, db, \ get_next_new_schueler_id, Stufe bp = Blueprint("klausuren", __name__, url_prefix="/klausuren") @@ -270,15 +270,7 @@ def edit(klausur_id): is_new = True new_schueler_nachname = request.form["new-schueler-nachname"].strip() new_schueler_vorname = request.form["new-schueler-vorname"].strip() - new_schueler_stammschule_kuerzel = request.form.get("new-schueler-stammschule", None) - - stammschule = None - if new_schueler_stammschule_kuerzel: - stammschule = Koopschule.query.filter_by(kuerzel=new_schueler_stammschule_kuerzel).first() - - if stammschule is None: - abort(400) - return + new_schueler_koop = ("new-schueler-koop" in request.form) if not new_schueler_nachname or not new_schueler_vorname: flash("Bitte geben Sie einen vollständigen Namen für den neuen Schüler an.", "error") @@ -286,7 +278,7 @@ def edit(klausur_id): schueler = Schueler(id=get_next_new_schueler_id(), nachname=new_schueler_nachname, vorname=new_schueler_vorname, stufe=klausur.stufe, - stammschule=stammschule) + koop=new_schueler_koop) db.session.add(schueler) else: diff --git a/nateman/commands.py b/nateman/commands.py index 794f0af..852a9e1 100644 --- a/nateman/commands.py +++ b/nateman/commands.py @@ -25,7 +25,7 @@ from flask.cli import with_appcontext from nateman.exporter import excelexport from nateman.importer import excelimport, KoopSchuelerImportError from . import emails, util, assigner -from .models import Koopschule, Lehrer, Stufe, db, Session +from .models import Lehrer, Stufe, db, Session from .config_manager import config @@ -121,46 +121,6 @@ def remove_stufe_command(name, yes): return 0 -@click.command("add-koopschule") -@click.argument("kuerzel", type=click.STRING) -@click.argument("name", type=click.STRING) -@with_appcontext -def add_koopschule_command(kuerzel, name): - """Fügt eine Koop-Schule zur Datenbank hinzu.""" - koop_schule = Koopschule.query.filter_by(name=name).first() - - if koop_schule is not None: - click.echo(f"Fehler: Eine Koop-Schule mit dem Kürzel {kuerzel} existiert bereits.", err=True) - return 1 - - new_koop_schule = Koopschule(kuerzel=kuerzel, name=name) - db.session.add(new_koop_schule) - - db.session.commit() - - click.echo("Die Koop-Schule wurde erfolgreich hinzugefügt.") - return 0 - - -@click.command("remove-koopschule") -@click.argument("kuerzel", type=click.STRING) -@with_appcontext -def remove_koopschule_command(kuerzel): - """Entfernt eine Koop-Schule und alle mit ihr verknüpften Daten von der Datenbank.""" - - koop_schule = Koopschule.query.filter_by(kuerzel=kuerzel).first() - - if koop_schule is None: - click.echo(f"Fehler: Eine Koop-Schule mit dem Kürzel {kuerzel} existiert nicht.", err=True) - return 1 - - db.session.delete(koop_schule) - db.session.commit() - - click.echo("Die Koop-Schule wurde erfolgreich entfernt.") - return 0 - - @click.command("make-admin") @click.argument("kuerzel") @with_appcontext @@ -250,8 +210,6 @@ def init_commands(): cli.add_command(take_admin_command) cli.add_command(add_stufe_command) cli.add_command(remove_stufe_command) - cli.add_command(add_koopschule_command) - cli.add_command(remove_koopschule_command) cli.add_command(send_reminder_mails_command) cli.add_command(apply_email_format_command) cli.add_command(cleanup_command) diff --git a/nateman/importer.py b/nateman/importer.py index cdc146f..b5ce06d 100644 --- a/nateman/importer.py +++ b/nateman/importer.py @@ -29,7 +29,7 @@ from xml.dom import minidom from . import util from .config_manager import config -from .models import Klausur, Klausurteilnahme, Lehrer, Schueler, Stufe, db, get_next_new_schueler_id, Koopschule +from .models import Klausur, Klausurteilnahme, Lehrer, Schueler, Stufe, db, get_next_new_schueler_id class KlausurplanImportError(Exception): @@ -198,18 +198,11 @@ def excelimport(filepath: str): klausuren.pop(i) if len(klausuren) > 0: schueler_entity = Schueler(id=get_next_new_schueler_id(), nachname=s[0], vorname=s[1], - stufe=klausuren[0].stufe) - schule_entity = Koopschule.query.filter_by(kuerzel=s[4]).first() - if schule_entity is not None: - schueler_entity.stammschule = schule_entity - for klausur in klausuren: - teilnahme_entity = Klausurteilnahme(klausur=klausur, schueler=schueler_entity) - db.session.add(schueler_entity) - db.session.add(teilnahme_entity) - else: - raise KoopSchuelerImportError("Für den Schüler " + s[0] + ", " + s[1] - + "konnte keine Koopschule mit dem Kürzel " + s[4] - + " gefunden werden.") + stufe=klausuren[0].stufe, koop=True) + for klausur in klausuren: + teilnahme_entity = Klausurteilnahme(klausur=klausur, schueler=schueler_entity) + db.session.add(schueler_entity) + db.session.add(teilnahme_entity) else: exceptions.append(s) diff --git a/nateman/models.py b/nateman/models.py index 08308ba..7b8ab74 100644 --- a/nateman/models.py +++ b/nateman/models.py @@ -58,11 +58,9 @@ class Schueler(db.Model): vorname = db.Column(db.String(collation="NOCASE"), nullable=False) stufe_name = db.Column(db.String(), db.ForeignKey("stufe.name", onupdate="CASCADE", ondelete="CASCADE"), nullable=False) - stammschule_name = db.Column(db.String(), - db.ForeignKey("koopschule.kuerzel", onupdate="CASCADE", ondelete="CASCADE")) + koop = db.Column(db.Boolean, default=False, nullable=False) stufe = db.relationship("Stufe", lazy="select") - stammschule = db.relationship("Koopschule", lazy="select") def __str__(self): return f"{self.nachname}, {self.vorname} ({self.stufe.name}, ID:{self.id})" @@ -189,11 +187,6 @@ class Klausur(db.Model): return self.date <= datetime.now().date() -class Koopschule(db.Model): - kuerzel = db.Column(db.String(), primary_key=True) - name = db.Column(db.String()) - - class Session(db.Model): key = db.Column(db.String(), primary_key=True) expiry = db.Column(db.DateTime, nullable=False) diff --git a/nateman/static/img/nateman-erm.svg b/nateman/static/img/nateman-erm.svg index 28acb5b..2c10c28 100644 --- a/nateman/static/img/nateman-erm.svg +++ b/nateman/static/img/nateman-erm.svg @@ -1,57 +1,57 @@ - + - + - + - - - - + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - + + + + + + + + - + - + - + @@ -98,612 +98,572 @@ - - - - Lehrer + + + + Lehrer - - - - id + + + + id - - - - kuerzel + + + + kuerzel - - - - email + + + + email - - - - is_confirmed + + + + is_confirmed - - - - pwd_hash + + + + pwd_hash - - - - is_admin + + + + is_admin - - + + - - + + - - + + - - + + - - + + - - + + - - - - pwd_changed + + + + pwd_changed - - - - confirmation_token + + + + confirmation_token - - - - password_reset_token + + + + password_reset_token - - - - password_reset_expiry + + + + password_reset_expiry - - + + - - + + - - + + - - + + - - - - Klausur + + + + Klausur - - - - id + + + + id - - - - kursname + + + + kursname - - - - laenge + + + + laenge - - - - edited + + + + edited - - - - Stufe + + + + Stufe - - - - berätLehrer.beraet_name + + + + berätLehrer.beraet_name - - + + - - + + - - - - gehört zuKlausur.stufe_name + + + + gehört zuKlausur.stufe_name - - + + - - - - wird betreutKlausur.lehrer_id + + + + wird betreutKlausur.lehrer_id - - + + - - + + - - + + - - - - Schueler + + + + Schueler - - - - nimmt TeilKlausurteilnahme.schueler_id,.klausur_id + + + + nimmt TeilKlausurteilnahme.schueler_id,.klausur_id - - + + - - + + - - - - versaeumt + + + + versaeumt - - - - attestiert + + + + attestiert - - + + - - + + - - + + - - + + - - - - ist inSchueler.stufe_name + + + + ist inSchueler.stufe_name - - + + - - + + - - - - id + + + + id - - - - vorname + + + + vorname - - - - nachname + + + + nachname - + - - - - Koopschule + + 1 - + - - - - ist inSchueler.stammschule_name + + n - + - - + + 1 - + - - + + n - + - - - - kuerzel + + n - + - - - - name + + 1 - + - - + + n - + - - + + m - + - - + + n - + - - + + 1 + + + + + + + + name + + + + + + + + import_date - - - - - - - - - 1 - - - - - n + + - + - - 1 + + + + nachgeschrieben - + - - n + + - + - - 1 + + - + - - n + + + + date - + - - n + + - + - - 1 + + - + - - n + + + + startperiod - + - - m + + + + endperiod - + - - n + + - + - - 1 + + - + - - - - name + + - + - - - - import_date + + - - + + - - - - nachgeschrieben + + + + koop - - + + - + - - + + + + annotation - - + + - + - - - - date - - - - - - - - - - - - - - - - - - - - startperiod - - - - - - - - endperiod - - - - - - - - - - - - + + diff --git a/nateman/templates/klausuren/edit.html.j2 b/nateman/templates/klausuren/edit.html.j2 index b2b4a15..137d591 100644 --- a/nateman/templates/klausuren/edit.html.j2 +++ b/nateman/templates/klausuren/edit.html.j2 @@ -191,10 +191,7 @@ - ({% if kt.schueler.stammschule is not none %}{{ kt.schueler.stammschule.name }}, - {% endif %}{{ kt.schueler.id }}) - + ({{ kt.schueler.id }}{% if kt.schueler.koop %}, Koop{% endif %}) @@ -237,7 +234,7 @@ {% for schueler in not_in_klausur_list %} {% endfor %} @@ -254,15 +251,8 @@
-
-
- -
+
+
diff --git a/nateman/templates/schueler/versaeumnisse.html.j2 b/nateman/templates/schueler/versaeumnisse.html.j2 index 6355f95..55a5a63 100644 --- a/nateman/templates/schueler/versaeumnisse.html.j2 +++ b/nateman/templates/schueler/versaeumnisse.html.j2 @@ -61,8 +61,7 @@ {% for kt in versaeumt_list %} {{ kt.schueler.nachname }}, {{ kt.schueler.vorname }} - ({% if kt.schueler.stammschule is not none %}{{ kt.schueler.stammschule.name }}, - {% endif %}{{ kt.schueler.id }}) + ({{ kt.schueler.id }}{% if kt.schueler.koop %}, Koop{% endif %}) {{ macros.date(kt.klausur.date) }} {{ kt.klausur.kursname }}