Readme nachgebessert, Fehler im Umgang mit leeren und fehlerhaften Einträgen korrigiert

This commit is contained in:
Wolfgang Wiedermann 2023-01-26 14:40:32 +01:00
parent 989e1a7eca
commit 162ecfd053
4 changed files with 36 additions and 6 deletions

View File

@ -6,7 +6,7 @@ mehrerer sequenziell ausgeführter Uploads von Excel-Dateien mit Noten zu einer
Das Verfahren soll sicherstellen, dass auch dann, wenn mehrere Prüfer einer gemeinsamen Prüfung unabhängig voneinander Leistungen via Excel-Import Das Verfahren soll sicherstellen, dass auch dann, wenn mehrere Prüfer einer gemeinsamen Prüfung unabhängig voneinander Leistungen via Excel-Import
bereitstellen, keine bereits eingetragenen Noten gelöscht werden. bereitstellen, keine bereits eingetragenen Noten gelöscht werden.
Der Hintergrund ist, dass insb. bei großen Prüfungsgruppen die Korrekturarbeit zwischen mehreren Prüfern aufgeteilt werden soll, ohne dass die Studierenden vorher bereits in Gruppen, die dem Prüfer eindeutig zugeordnet sind, aufgeteilt werden sollen. Hintergrund der Anforderung ist, dass insb. bei großen Prüfungen einem Prüfungsorganisationssatz mehrere Prüfer\*innen zugewiesen werden. Bei Prüfungsanmeldung melden sich Studierende also für einen Prüfungsorganisationssatz mit mehreren Prüfer\*innen an. Erst im Nachgang (also nach Prüfungsanmeldung) wird die Korrektur der Prüfung unter den Prüfer\*innen aufgeteilt. Eine eindeutige Zuordnung Studierender für einen einzelnen Prüfer\*in ist somit bei Prüfungsanmeldung noch nicht möglich. Jeder Prüfer*in einer Prüfergruppe soll also unabhängig die Noten seiner Prüflinge per Excel-Datei pro Prüfungsorganisationssatz uploaden können. Derzeit muss zwingend die Noteneingabemaske verwendet werden, denn ein Upload eines Prüfers überschreibt den vorigen Upload des anderen Prüfers. Es "zählt" der letzte Upload bevor die Noteneingabe abgeschlossen werden kann. Somit läuft die Hochschule Gefahr Prüfungsleistungen unvollständig oder falsch abzubilden.
Jeder der Prüfer soll jedoch trotzdem zur Noteneintragung selbständig und unabhängig von seinen KollegInnen mit dem Excel-Upload arbeiten können. Jeder der Prüfer soll jedoch trotzdem zur Noteneintragung selbständig und unabhängig von seinen KollegInnen mit dem Excel-Upload arbeiten können.
@ -39,6 +39,35 @@ für alle Zeilen im Tabellenblatt:
nein: nein:
Eintrag in Fehlerliste (die angezeigt wird!) erzeugen Eintrag in Fehlerliste (die angezeigt wird!) erzeugen
nein: nein:
wenn Note gültig
ja:
Wert setzen Wert setzen
ggf. in GUI sichtbarer Protokolleintrag ggf. in GUI sichtbarer Protokolleintrag
nein:
Wert nicht setzen
ggf. in GUI sichtbarer Protokolleintrag
```
### Output eines Durchlaufs mit den gegebenen Testdaten
```
$ python3 merge_sample.py
Importiere aus excel_file_1.xlsx - Tabelle1
Mtknr: 1 Note: 1.0 hinzufügen
Mtknr: 2 Note: 1.3 hinzufügen
Mtknr: 3 Note: 1.0 hinzufügen
Mtknr: 4 Note: 3.0 hinzufügen
Mtknr: 5 Note: 2.3 hinzufügen
Fehlender oder ungültiger Notenwert für Mtknr 6
Importiere aus excel_file_2.xlsx - Tabelle1
Wollen Sie die Note zu 1 auf 1.3 aktualisieren? (j/n)
n
unverändert
Mtknr: 7 Note: 1.3 hinzufügen
Mtknr: 8 Note: 1.0 hinzufügen
Mtknr: 9 Note: 3.0 hinzufügen
Note zu 2 wird nicht geändert, Zeile leer oder ungültig
Note zu 3 wird nicht geändert, Zeile leer oder ungültig
``` ```

Binary file not shown.

Binary file not shown.

View File

@ -19,7 +19,7 @@ connection = sqlite3.connect(SQLITE_FILE)
# Hier als Konstante, da in der Praxis wahrscheinlich aus Kontext # Hier als Konstante, da in der Praxis wahrscheinlich aus Kontext
# in Webanwendung abgeleitet # in Webanwendung abgeleitet
PRUEFUNG_ID = 3 PRUEFUNG_ID = 5
def read_file(filename): def read_file(filename):
# alle Validierungsschritte zugunsten eines übersichtlichen Beispiels eingespart # alle Validierungsschritte zugunsten eines übersichtlichen Beispiels eingespart
@ -81,12 +81,13 @@ def merge_data(pruefung_id, new_data):
print(f"Note zu {mtknr} wird nicht geändert, Notenwert unverändert") print(f"Note zu {mtknr} wird nicht geändert, Notenwert unverändert")
else: else:
print(f"Note zu {mtknr} wird nicht geändert, Zeile leer oder ungültig") print(f"Note zu {mtknr} wird nicht geändert, Zeile leer oder ungültig")
else: elif is_valid_value(pruefung_id, note):
print(f"Mtknr: {mtknr} Note: {note} hinzufügen") print(f"Mtknr: {mtknr} Note: {note} hinzufügen")
# im Falle von HISinOne wegen bereits bestehendem Anmeldesatz auch Update, so aber # im Falle von HISinOne wegen bereits bestehendem Anmeldesatz auch Update, so aber
# einfacher im Beispiel darzustellen... # einfacher im Beispiel darzustellen...
connection.execute(insert_sql, (pruefung_id, mtknr, note)) connection.execute(insert_sql, (pruefung_id, mtknr, note))
else:
print(f"Fehlender oder ungültiger Notenwert für Mtknr {mtknr}")
f1 = read_file("excel_file_1.xlsx") f1 = read_file("excel_file_1.xlsx")