120 lines
5.1 KiB
Python
120 lines
5.1 KiB
Python
########################################
|
|
# -- Python Script für UCS Import -- #
|
|
# -- by Patrick vom Hagen 2024 -- #
|
|
########################################
|
|
|
|
|
|
###############################################################
|
|
# IMPORT - standard Python imports für benötigte Bibliotheken #
|
|
|
|
from src import step1, step2, step3, Logger
|
|
|
|
import pandas as pd # pandas für Datenmanagement
|
|
import chardet # chardet erkennt Formatierung - Umwandlung des erkannten Formats in UTF-8
|
|
import csv # zur Verarbeitung von .csv Dateien
|
|
import uuid # zur Generierung von neuen UUIDs
|
|
import sys # zum Speichern der Konsolen Outputs in ein Log File
|
|
import os #
|
|
|
|
#############################
|
|
# Flags / globale Variablen #
|
|
|
|
del_zeros = False # Boolean, ob führende Nullen bei Klassen entfernt werden sollen
|
|
get_typos = False # Boolean, ob geringe Unterschiede zwischen den Listen ausgegeben werden sollen
|
|
test_user = [] # Array in dem Spezialuser gespeichert und wieder eingefügt werden
|
|
|
|
school_id = 'HL' # HL-Tag für Klassen
|
|
ox_context = 0 # OX Context pro Schule
|
|
mail_quota_lul = 2048 # MailUserQuota LuL
|
|
ox_quota_lul = 20480 # oxUserQuota LuL
|
|
mail_quota_sus = 1024 # MailUserQuota SuS
|
|
ox_quota_sus = 5120 # oxUserQuota LuL
|
|
|
|
|
|
#######################
|
|
# MAIN FUNCTION START #
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
# Erstellt oder löscht Inhalte vorhandener Logdatei und loggt Konsolenausgaben
|
|
log_file_path = 'log.txt'
|
|
if os.path.exists(log_file_path):
|
|
open(log_file_path, 'w').close()
|
|
sys.stdout = Logger.Logger(log_file_path)
|
|
|
|
print("Schul-IT UCS-Import Tool:\n")
|
|
dev = True # CHANGE to "False" FOR PRODUCTION RUN <------
|
|
|
|
# ----------------------------------------------------------------- #
|
|
# Step 1 - Dateien wählen, formatieren, einlesen | Variablen setzen #
|
|
print("Step1: Listen einlesen\n")
|
|
|
|
# ToDo Daten mit UI einlesen
|
|
# lehrer_liste_neu = "./Data/SaM/export_lehrer_SaM.csv"
|
|
lehrer_liste_neu = "./Data/GKS/exportLuL.csv"
|
|
lehrer_liste_system = "./Data//GKS/systemLuL.csv"
|
|
lul_out_path = './Data/outputLehrer.csv'
|
|
|
|
schueler_liste_neu = "./Data/GKS/exportSuS.csv"
|
|
schueler_liste_system = "./Data/GKS/systemSuS.csv"
|
|
sus_out_path = './Data/outputSchueler.csv'
|
|
|
|
# Variablen füllen:
|
|
if not dev:
|
|
print("Eingabefelder:")
|
|
school_id = "HL070" + input("Schul-ID eingeben HL070:")
|
|
ox_context = input("OX-Context der Schule eingeben:")
|
|
if input("Klassen mit führenden Nullen? (y/n) ").lower() == "y":
|
|
del_zeros = False
|
|
else:
|
|
del_zeros = True
|
|
|
|
print("\nSchul ID:", school_id, "\nOX-Context:", ox_context, "\nNullen:", del_zeros)
|
|
|
|
lul_new = step1.check_export_file(lehrer_liste_neu)
|
|
lul_sys = step1.create_dataframe_system(lehrer_liste_system)
|
|
|
|
sus_new = step1.check_export_file(schueler_liste_neu)
|
|
sus_sys = step1.create_dataframe_system(schueler_liste_system)
|
|
|
|
# Test- und Funktionsuser auslagern
|
|
keywords = ['Test', 'test', 'Raum', 'raum', 'User', 'user', 'Tafel', 'tafel', 'Admin', 'admin']
|
|
lul_testuser_df = step1.extract_testusers(lul_sys, keywords)
|
|
print("\nAnzahl Test- / Systemuser LuL:", len(lul_testuser_df))
|
|
sus_testuser_df = step1.extract_testusers(sus_sys, keywords)
|
|
print("Anzahl Test- / Systemuser SuS:", len(sus_testuser_df))
|
|
|
|
# ---------------------------------------------------- #
|
|
# Step 2 - auf name, vorname reduzieren und abgleichen #
|
|
print("\nStep2: Listen abgleichen")
|
|
|
|
print("\n Lehrer:innen:")
|
|
lul_matched, new_lul = step2.compare_data(lul_new, lul_sys)
|
|
print("\n Schüler:innen:")
|
|
sus_matched, new_sus = step2.compare_data(sus_new, sus_sys,)
|
|
print("\nStep2: Abgleich abgeschlossen! \n")
|
|
|
|
# ----------------------------------------------------------------------------------------#
|
|
# Step 3 - Import Data generieren - klasse, uuids, weiteres in einer Liste zusammenführen #
|
|
|
|
# Lul: Namen + UUIDs + Testuser
|
|
lul_import = step3.merch_uuids(new_lul, lul_matched, dev)
|
|
lul_import = step3.add_school_data(lul_import, school_id, ox_context, mail_quota_lul, ox_quota_lul)
|
|
lul_import = pd.concat([lul_import, lul_testuser_df], ignore_index=True)
|
|
print(f"{len(lul_testuser_df)} Testuser angefügt - {len(lul_import)} Einträge in LuL Liste")
|
|
lul_import.to_csv(lul_out_path, sep=';', index=False)
|
|
print(f"LuL Import CSV unter {lul_out_path} erfolgreich erstellt!")
|
|
|
|
# SuS: Namen + UUIDs + Klassen + Testuser
|
|
sus_import = step3.merch_uuids(new_sus, sus_matched, dev)
|
|
sus_import = step3.add_school_data(sus_import, school_id, ox_context, mail_quota_sus, ox_quota_sus)
|
|
sus_import = pd.concat([sus_import, sus_testuser_df], ignore_index=True)
|
|
print(f"{len(sus_testuser_df)} Testuser angefügt - {len(sus_import)} Einträge in SuS Liste")
|
|
sus_import.to_csv(sus_out_path, sep=';', index=False)
|
|
print(f"SuS Import CSV unter {sus_out_path} erfolgreich erstellt!")
|
|
print("\nImport Script beendet.")
|
|
|
|
# Log Datei fertig - Ausgang schließen
|
|
sys.stdout = sys.__stdout__
|