In Funktion 'get_sivas_bom' wird nun in Fällen, bei denen keine JSON erzeugt werden, ein ValueError geschmissen, der ggf. später bei Bedarf per Exception gehandelt werden kann + In Funktion 'get_sivas_teilestamm' wird nun geprüft, ob das Tool 'KSbExcelExportSivasTeilestamm.exe' von Hr. Jakob mit den angegebenen Nummern tatsächlich valide CSV's generiert hat. Das ist deshalb von Bedeutung, weil das Tool auch dann CSV's erzeugt, wenn die Werte, die man per Flag '-teilenr' bereitstellt, nicht als Nummer in SIVAS vorliegen, wie z.B. 'abc'

This commit is contained in:
2025-04-20 11:43:07 +02:00
parent 0c54145655
commit 56ff5010c7
+17 -8
View File
@@ -4,6 +4,7 @@ import os
import shutil
import subprocess
import sys
import csv
"""
@@ -88,9 +89,7 @@ def get_sivas_bom(sivas_id, out_dir=os.environ.get('CREMIG_DATA')):
subprocess.run(f'{sivas2json_exe_path} -o {out_dir} --format json -number "{sivas_id}"')
if not os.path.isfile(os.path.join(out_dir, sivas_id + ".json")):
print(f"Fehler - Konnte {sivas_id}.json nicht erzeugen. Es handelt sich evtl. um eine Nummer ohne Stückliste. Andernfalls prüfen, ob Teilenummer korrekt geschrieben wurde.")
return False
return True
raise ValueError(f"{sivas_id}.json konnte nicht erzeugt werden. Evtl. Nummer ohne Stückliste.")
def get_sivas_teilestamm(sivas_ids, out_dir=os.environ.get('CREMIG_DATA'), overwrite=True):
@@ -112,19 +111,29 @@ def get_sivas_teilestamm(sivas_ids, out_dir=os.environ.get('CREMIG_DATA'), overw
ids_to_generate = []
for id in sivas_ids:
out_file = os.path.join(out_dir, id + ".csv")
if not overwrite and os.path.isfile(out_file):
if not overwrite and os.path.isfile(os.path.join(out_dir, id + ".csv")):
continue
ids_to_generate.append(f'"{id}"') # Anführungszeichen erforderlich, damit Art.Nr. mit Leerzeichen, z.B. "TOS Auswahl ILS" funktionieren
ids_to_generate.append(id)
if len(ids_to_generate) == 0:
print("CSV-Datei(en) existieren bereits oder angegebene Teilenummer(n) sind bereits migriert")
return
ids_to_generate = ",".join(ids_to_generate)
ids_to_generate_str = ",".join([f'"{id}"' for id in ids_to_generate]) # Anführungszeichen erforderlich, damit Art.Nr. mit Leerzeichen, z.B. "TOS Auswahl ILS" funktionieren
os.environ["SIVAS_EXCEL_EXPORT_DIR"] = out_dir # Umgebungsvariable legt Ausgabeverzeichnis der CSV-Dateien im Programm 'KSbExcelExportSivasTeilestamm' fest. Der Variablenname ist durch genanntes Programm vorgegeben, siehe help-Text des Programms!
print(f"Erstelle CSV(s) mit Teilestamminformationen...")
subprocess.run(f'{sivas_teilestamm_exe} -teilenr={ids_to_generate} -open_target_dir=n')
subprocess.run(f'{sivas_teilestamm_exe} -teilenr={ids_to_generate_str} -open_target_dir=n')
# Prüft Existenz der angegebenen SIVAS-Nummern, indem geschaut wird, ob die CSV-Dateien 2 Zeilen aufweisen
# Nicht über Returncode des Subprocess ermittelbar, da dieser immer 0 ist, auch wenn die Nr. nicht in SIVAS existiert
for id in ids_to_generate:
csv_path = os.path.join(out_dir, id + ".csv")
with open(csv_path, encoding="utf-8", newline="") as csv_file:
csv_data = csv.reader(csv_file, delimiter=";")
line_nums = sum(1 for row in csv_data)
if line_nums != 2:
raise ValueError(f"SIVAS-Teilenummer '{id}' existiert nicht! Bitte prüfen, ob Nummer korrekt geschrieben wurde!")
if __name__ == '__main__':