# Vorschlag: Zusammenführen statt Überschreiben im Excel-Upload für Prüfungsergebnisse In diesem Repository beschreiben wir einen Vorschlag zur konsistenten und nutzerfreundlichen Verarbeitung mehrerer sequenziell ausgeführter Uploads von Excel-Dateien mit Noten zu einer Prüfung. 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. 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. ## Anmerkung: Der beiliegende Beispielcode dient zum Testen und zur Kommunikation des Algorithmus und ist ohne konkrete Beziehung zu Datenstrukturen und Code von HISinOne umgesetzt. ## Algorithmus: ### Grundannahme Der gesamte Vorgang zum Import einer Excel-Datei wird in einer Transaktion abgehandelt, sodass die Datei entweder vollständig übernommen wird, oder in der Datenbank/HISinOne der Zustand von vor dem Import wiederhergestellt wird. ### Ablauf ``` für alle Zeilen im Tabellenblatt: prüfe ob Prüfungsanmeldesatz vorhanden: nein: Eintrag in Fehlerliste (die angezeigt wird!) erzeugen prüfe ob bereits eine Note gesetzt: ja: wenn Note gültig ja: wenn Note verändert: ja: Nutzerinteraktion: neuen Wert übernehmen oder alten behalten nein: ignorieren bzw. ggf. Meldung in sichtbarem Protokoll nein: Eintrag in Fehlerliste (die angezeigt wird!) erzeugen nein: wenn Note gültig ja: Wert setzen 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 ```