Rekursive Funktion in compare_lists.py gefixed. Sortierung wird nun auch in exportierter Excel-Datei dargestellt.
This commit is contained in:
+45
-46
@@ -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
@@ -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)
|
||||||
Reference in New Issue
Block a user