######################################## # -- 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 = 'output/log.txt' import_command_path = 'output/import_command.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 # # ToDo Daten mit UI einlesen # lehrer_liste_neu = "./Data/SaM/export_lehrer_SaM.csv" school_folder = "HMS" lehrer_liste_neu = f"./Data/{school_folder}/export_lul.csv" lehrer_liste_system = f"./Data//{school_folder}/sys_lul.csv" lul_out_path = 'output/outputLehrer.csv' schueler_liste_neu = f"./Data/{school_folder}/export_sus.csv" schueler_liste_system = f"./Data/{school_folder}/sys_sus.csv" sus_out_path = 'output/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("\n Lehrer:innen:") lul_matched, new_lul = step2.compare_data(lul_new, lul_sys, len(lul_testuser_df)) print("\n Schüler:innen:") sus_matched, new_sus = step2.compare_data(sus_new, sus_sys, len(sus_testuser_df)) # ----------------------------------------------------------------------------------------# # Step 3 - Import Data generieren - klasse, uuids, weiteres in einer Liste zusammenführen # # ToDo verfügbare Klassen listen und abgleichen # ToDo Quota Abweichungen ermitteln und übernehmen # Lul: Namen + UUIDs + Testuser step3.create_output_list('LuL', new_lul, lul_matched, dev, school_id, ox_context, mail_quota_lul, ox_quota_lul, lul_testuser_df, lul_out_path) # SuS: Namen + UUIDs + Klassen + Testuser step3.create_output_list('SuS', new_sus, sus_matched, dev, school_id, ox_context, mail_quota_sus, ox_quota_sus, sus_testuser_df, sus_out_path) # Log Datei fertig - Ausgang schließen sys.stdout = sys.__stdout__