Rekursive Funktion in compare_lists.py gefixed. Sortierung wird nun auch in exportierter Excel-Datei dargestellt.

This commit is contained in:
MissMarple
2023-10-30 20:13:25 +01:00
parent c26fdc2781
commit 5e401e0d50
2 changed files with 50 additions and 51 deletions
+45 -46
View File
@@ -3,90 +3,89 @@ import os
import pandas as pd import pandas as pd
import json 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): def create_sorter_string(sivasData, sivasId):
p = sivasData[sivasId]['Parent']
s = sivasId # Funktion setzt rekursiv einen String zusammen, der anzeigt, wo sich eine Teilenummer in der Hierarchie der obersten, zu migrierenden Baugruppe befindet.
if p not in sivasData: # Beispiel:
return None # Die Teilenummer "123456" ist das Halbzeug der Teilenummer "234567". "234567" ist wiederum in der Baugruppe "345678" eingebaut.
recurval = create_sorter_string(sivasData, p) # Die Funktion gibt dann folgenden Sortier-String zurück:
if recurval is not None: # 345678-234567-123456
s = recurval + '-'+ s
return s 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): 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 = []
# Sortierung Teilenummer Bezeichnung Bestandsabfrage Teile Beurteilung Zusatzbemerkung teilenummer = []
# Sortierung: Minus - Separierten "Pfad" dieses Einzelteils im Assembly bezeichnung = []
# Teilenummer: Sivas Teilenummer migrationsstatus = []
# Bezeichnung: SIVAS Bezeichnung teilebeurteilung = []
# Bestandsabfrage: Importieren oder Verfügbar zusatzbemerkung = []
# die restlichen Spalten bleiben leer
sortierung = list()
teilenummer = list()
bezeichnung = list()
bestand = list()
teilebeurteilung = list()
zusatzbemerkung = list()
for item in sivasData: for item in sivasData:
sortierung.append(sivasData[item]['Parent']) sortierung.append(create_sorter_string(sivasData, item))
teilenummer.append(item) teilenummer.append(item)
bezeichnung.append(sivasData[item]['Bezeichnung']) bezeichnung.append(sivasData[item]['Bezeichnung'])
if existingIds[item] is True: if existingIds[item] is True:
existing = "VERFÜGBAR" existing = "VERFÜGBAR"
else: else:
existing = "IMPORTIEREN" existing = "IMPORTIEREN"
bestand.append(existing) migrationsstatus.append(existing)
teilebeurteilung.append('') teilebeurteilung.append('')
zusatzbemerkung.append('') zusatzbemerkung.append('')
data = { data = {
"Sortierung":sortierung, "Sortierung":sortierung,
"Teilenummer":teilenummer, "Teilenummer":teilenummer,
"Bezeichnung":bezeichnung, "Bezeichnung":bezeichnung,
"Bestandsabfrage":bestand, "Migrationsstatus":migrationsstatus,
"Teile Beurteilung":teilebeurteilung, "Teile Beurteilung":teilebeurteilung,
"Zusatzbemerkung":zusatzbemerkung "Zusatzbemerkung":zusatzbemerkung
} }
excel_filename = os.path.join(outPath, sivasId + ".xlsx")
df = pd.DataFrame.from_dict(data) 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): def compareFiles(rdDataBasePath, jsonPath, sivasId, outPath):
# Lies die RD Datenbank ein
df = pd.read_csv(rdDataBasePath, sep=';') # Lies die CSV-Datei ein, in der alle RuleDesigner-Nummern aufgelistet sind ein
df = pd.read_csv(rdDataBasePath, sep=';', converters={"Teilenummer":str})
teileNummern = list() tn = tuple(df["Teilenummer"])
for nummer in df["Teilenummer"].to_list():
teileNummern.append(str(nummer))
tn = tuple(teileNummern)
# 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: with open(jsonPath, encoding='utf-8') as fp:
sivasData = json.load(fp) sivasData = json.load(fp)
# Prüfe das Vorhandensein der JsonIds in der RD Datenbank # Prüfe, ob die Sivas-Nummern bereits migriert wurden
existingIds = dict() existingIds = {}
for item in sivasData: for item in sivasData:
if item in tn: if item in tn:
existingIds[item] = True existingIds[item] = True
else: else:
existingIds[item] = False 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) create_excel_export(existingIds, sivasData, sivasId, outPath)
+5 -5
View File
@@ -14,13 +14,13 @@ class RecursiveStringTest(unittest.TestCase):
"Position": ".10/0", "Position": ".10/0",
"Parent": "829524001" "Parent": "829524001"
}, },
"829526000": {
"Position": "..10/0",
"Parent": "829526002"
},
"829526002": { "829526002": {
"Position": ".20/0", "Position": ".20/0",
"Parent": "829524001" "Parent": "829524001"
},
"829526000": {
"Position": "..10/0",
"Parent": "829526002"
} }
} }
''' '''
@@ -29,4 +29,4 @@ class RecursiveStringTest(unittest.TestCase):
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main(exit=False)