Files
UCS_Import_Python/main.py
2024-08-27 13:04:25 +02:00

122 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 #
# .venv\Scripts\activate
if __name__ == "__main__":
school_folder = "7114SadW"
# Erstellt oder löscht Inhalte vorhandener Logdatei und loggt Konsolenausgaben
log_file_path = f'./Data/{school_folder}/gen_log.txt'
import_command_path = f'./Data/{school_folder}/gen_importCommand.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"
lehrer_liste_neu = f"./Data/{school_folder}/export_lul.csv"
lehrer_liste_system = f"./Data/{school_folder}/sys_lul.csv"
lul_out_path = f'./Data/{school_folder}/gen_Lehrer.csv'
schueler_liste_neu = f"./Data/{school_folder}/export_sus.csv"
schueler_liste_system = f"./Data/{school_folder}/sys_sus.csv"
sus_out_path = f'./Data/{school_folder}/gen_Schueler.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)
step1.check_quotas(lul_sys, mail_quota_lul, ox_quota_lul)
sus_new = step1.check_export_file(schueler_liste_neu)
sus_sys = step1.create_dataframe_system(schueler_liste_system)
step1.check_quotas(sus_sys, mail_quota_sus, ox_quota_lul)
# 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 #
# Klassen Übersicht leeren
with open(f'./Data/{school_folder}/gen_klassen.txt', 'w') as file:
file.write('')
lul_exel_path = f'./Data/{school_folder}/gen_stats_lul.xlsx'
sus_exel_path = f'./Data/{school_folder}/gen_stats_sus.xlsx'
print("\n Lehrer:innen:")
lul_matched, new_lul = step2.compare_data(lul_new, lul_sys, len(lul_testuser_df), lul_exel_path, school_folder)
print("\n Schüler:innen:")
sus_matched, new_sus = step2.compare_data(sus_new, sus_sys, len(sus_testuser_df), sus_exel_path, school_folder)
# ----------------------------------------------------------------------------------------#
# Step 3 - Import Data generieren - klasse, uuids, weiteres in einer Liste zusammenführen #
# 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__