diff --git a/lib/compare_lists.py b/lib/compare_lists.py index 1366b25..04b138b 100644 --- a/lib/compare_lists.py +++ b/lib/compare_lists.py @@ -3,90 +3,89 @@ import os import pandas as pd import json +""" +Dieses Programm : +- holt sich die CSV-Datei, in der alle exisitierenden RuleDesigner-Teilenummern enthalten sind +- holt sich die json-Datei, in der alle Teilenummern aufgelistet sind, die in Verbindung mit einer gewünschten Teilenummer migriert werden müssen +- exportiert alle Nummern aus der JSON-Datei in eine Excel Datei. Die Excel zeigt, welche Teilenummern bereits migriert wurden und welche noch migriert werden müssen. +""" + def create_sorter_string(sivasData, sivasId): - p = sivasData[sivasId]['Parent'] - s = sivasId - if p not in sivasData: - return None - recurval = create_sorter_string(sivasData, p) - if recurval is not None: - s = recurval + '-'+ s - return s + + # Funktion setzt rekursiv einen String zusammen, der anzeigt, wo sich eine Teilenummer in der Hierarchie der obersten, zu migrierenden Baugruppe befindet. + # Beispiel: + # Die Teilenummer "123456" ist das Halbzeug der Teilenummer "234567". "234567" ist wiederum in der Baugruppe "345678" eingebaut. + # Die Funktion gibt dann folgenden Sortier-String zurück: + # 345678-234567-123456 + + parent = sivasData[sivasId]['Parent'] + if parent not in sivasData: + return f"{parent}-{sivasId}" + recurval = create_sorter_string(sivasData, parent) + return f"{recurval}-{sivasId}" - -""" -Dieses Programm holt sich aus -- RD Fusion eine aktuellen Stand der exisitierenden IDS -- Sivas eine Liste der gewünschten Teile - -""" def create_excel_export(existingIds, sivasData, sivasId, outPath): - excelIdsExistingPath = os.path.join(outPath, sivasId + ".xlsx") + # Spalten in Excel-Datei: Sortierung, Teilenummer, Bezeichnung, Bestandsabfrage, Teilebeurteilung, Zusatzbemerkung + # Sortierung: Minus-separierter "Pfad" dieser Teilenummer im Assembly / im Halbzeug + # Teilenummer: Sivas-Teilenummer + # Bezeichnung: SIVAS-Bezeichnung der Teilenummer + # Bestandsabfrage: IMPORTIEREN oder VERFÜGBAR -> "IMPORTIEREN" = Teilenummer muss noch migriert werden, "VERFÜGBAR" = Teilenummer wurde bereits migriert + # Restliche Spalten bleiben leer, da sie erst in Excel befüllt werden - """ exportiert die Nummern der Sivas ID in eine Excel Datei um vorhandene von fehlenden zu unterscheiden """ - # Sortierung Teilenummer Bezeichnung Bestandsabfrage Teile Beurteilung Zusatzbemerkung - # Sortierung: Minus - Separierten "Pfad" dieses Einzelteils im Assembly - # Teilenummer: Sivas Teilenummer - # Bezeichnung: SIVAS Bezeichnung - # Bestandsabfrage: Importieren oder Verfügbar - # die restlichen Spalten bleiben leer - - sortierung = list() - teilenummer = list() - bezeichnung = list() - bestand = list() - teilebeurteilung = list() - zusatzbemerkung = list() + sortierung = [] + teilenummer = [] + bezeichnung = [] + migrationsstatus = [] + teilebeurteilung = [] + zusatzbemerkung = [] for item in sivasData: - sortierung.append(sivasData[item]['Parent']) + sortierung.append(create_sorter_string(sivasData, item)) teilenummer.append(item) bezeichnung.append(sivasData[item]['Bezeichnung']) if existingIds[item] is True: existing = "VERFÜGBAR" else: existing = "IMPORTIEREN" - bestand.append(existing) + migrationsstatus.append(existing) teilebeurteilung.append('') zusatzbemerkung.append('') - data = { "Sortierung":sortierung, "Teilenummer":teilenummer, "Bezeichnung":bezeichnung, - "Bestandsabfrage":bestand, + "Migrationsstatus":migrationsstatus, "Teile Beurteilung":teilebeurteilung, "Zusatzbemerkung":zusatzbemerkung } + + excel_filename = os.path.join(outPath, sivasId + ".xlsx") df = pd.DataFrame.from_dict(data) - df.to_excel(excelIdsExistingPath, sheet_name="Ergebnis", index_label="Sortierung") + df.to_excel(excel_filename, sheet_name="Ergebnis", index_label="Sortierung") def compareFiles(rdDataBasePath, jsonPath, sivasId, outPath): - # Lies die RD Datenbank ein - df = pd.read_csv(rdDataBasePath, sep=';') - - teileNummern = list() - for nummer in df["Teilenummer"].to_list(): - teileNummern.append(str(nummer)) - tn = tuple(teileNummern) + + # Lies die CSV-Datei ein, in der alle RuleDesigner-Nummern aufgelistet sind ein + df = pd.read_csv(rdDataBasePath, sep=';', converters={"Teilenummer":str}) + tn = tuple(df["Teilenummer"]) - # hole dir alle Ids aus der Json Datei + # Lies die JSON-Datei ein, in der alle Sivas-Teilenummern aufgelistet sind, die in Verbindung mit der Migration einer Teilenummer ebenfalls migriert werden müssen with open(jsonPath, encoding='utf-8') as fp: sivasData = json.load(fp) - # Prüfe das Vorhandensein der JsonIds in der RD Datenbank - existingIds = dict() + # Prüfe, ob die Sivas-Nummern bereits migriert wurden + existingIds = {} for item in sivasData: if item in tn: existingIds[item] = True else: existingIds[item] = False - # Schreibe eine Exceldatei mit den korrekten Spalten raus + # Schreibe eine Excel-Datei mit den korrekten Spalten raus create_excel_export(existingIds, sivasData, sivasId, outPath) diff --git a/lib/test_compare.py b/lib/test_compare.py index 7438c1a..6777527 100644 --- a/lib/test_compare.py +++ b/lib/test_compare.py @@ -14,13 +14,13 @@ class RecursiveStringTest(unittest.TestCase): "Position": ".10/0", "Parent": "829524001" }, - "829526000": { - "Position": "..10/0", - "Parent": "829526002" - }, "829526002": { "Position": ".20/0", "Parent": "829524001" + }, + "829526000": { + "Position": "..10/0", + "Parent": "829526002" } } ''' @@ -29,4 +29,4 @@ class RecursiveStringTest(unittest.TestCase): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main(exit=False) \ No newline at end of file