drawdxf sammelt ALLE Atikelnummern (Kabel, Motoren, Sensoren), prüft lokale bezeichner.cfg, ob für alle artikelnummern ein bezeichner vorhanden. Falls kein bezeichner vorhanden wird bezeichner.cfg um Block [Missing] ergänzt, und SIVAS Datenabfrage dafür gestartet. Scahlter --local zur vermeidung der Abfrage verfügbar
This commit is contained in:
+20
-19
@@ -3,22 +3,21 @@ import configparser
|
||||
import os
|
||||
import subprocess
|
||||
import csv
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def get_sivas_teilestamm(sivas_ids, out_dir=None, overwrite=True):
|
||||
def get_sivas_teilestamm(sivas_ids, overwrite=True, out_dir= os.environ.get('PROJECT_DATA')):
|
||||
"""
|
||||
Generiert für jede angegebene SIVAS-Teilenummer eine CSV-Datei, in der die Teilestamm-Informationen gespeichert sind
|
||||
"""
|
||||
sivas_teilestamm_exe = os.environ.get('SIVAS_TEILESTAMM')
|
||||
|
||||
if not os.path.isfile(sivas_teilestamm_exe):
|
||||
raise FileNotFoundError(
|
||||
f"Programmpfad '{sivas_teilestamm_exe}' nicht erreichbar. "
|
||||
f"Bitte Zugriff und Variable SIVAS_TEILESTAMM in setenv.bat prüfen."
|
||||
)
|
||||
|
||||
if out_dir is None:
|
||||
out_dir = os.environ.get('PROJECT_DATA')
|
||||
|
||||
if not os.path.isdir(out_dir):
|
||||
raise NotADirectoryError(
|
||||
f"Ausgabeverzeichnis '{out_dir}' existiert nicht. "
|
||||
@@ -51,10 +50,6 @@ def get_sivas_teilestamm(sivas_ids, out_dir=None, overwrite=True):
|
||||
rows = list(csv_data)
|
||||
if len(rows) != 2:
|
||||
raise ValueError(f"SIVAS-Teilenummer '{id}' existiert nicht oder liefert keine gültige CSV.")
|
||||
# Rückgabe des Bezeichners (zweite Zeile, zweite Spalte)
|
||||
yield id, rows[1][1].strip()
|
||||
|
||||
|
||||
|
||||
def read_bezeichner_from_csv(teilenr):
|
||||
"""
|
||||
@@ -64,28 +59,32 @@ def read_bezeichner_from_csv(teilenr):
|
||||
:return: Bezeichner-String, falls erfolgreich. Wirft Exception bei Fehler.
|
||||
"""
|
||||
csv_dir = os.environ.get("PROJECT_DATA", ".")
|
||||
|
||||
csv_path = os.path.join(csv_dir, f"{teilenr}.csv")
|
||||
|
||||
if not os.path.isfile(csv_path):
|
||||
raise FileNotFoundError(f"CSV für Teilenummer '{teilenr}' nicht gefunden unter {csv_path}")
|
||||
|
||||
with open(csv_path, encoding="utf-8", newline="") as f:
|
||||
reader = csv.reader(f, delimiter=";")
|
||||
rows = list(reader)
|
||||
if len(rows) != 2:
|
||||
raise ValueError(f"Ungültiges Format oder keine Daten in CSV für '{teilenr}'")
|
||||
try:
|
||||
df = pd.read_csv(csv_path, sep=";", encoding="utf-8")
|
||||
except Exception as e:
|
||||
raise ValueError(f"Fehler beim Einlesen der CSV: {e}")
|
||||
|
||||
bezeichner = rows[1][1].strip()
|
||||
return bezeichner
|
||||
if df.shape[0] != 1:
|
||||
raise ValueError(f"Ungültiger Zeileninhalt für '{teilenr}' – erwartet genau eine Datenzeile.")
|
||||
|
||||
if "Bezeichnung1" not in df.columns:
|
||||
raise ValueError(f"Spalte 'Bezeichnung1' nicht gefunden in CSV für '{teilenr}'.")
|
||||
|
||||
return str(df["Bezeichnung1"].iloc[0]).strip()
|
||||
|
||||
def update_bezeichner(names_config):
|
||||
def update_bezeichner(names_config, config_path):
|
||||
|
||||
if "Missing" not in names_config or not names_config["Missing"]:
|
||||
print("Keine fehlenden Einträge in [Missing]. Keine Abfrage angestoßen.")
|
||||
return
|
||||
|
||||
missing_ids = list(names_config["Missing"].keys())
|
||||
resolved_ids = []
|
||||
|
||||
print(f"Starte SIVAS-Abfrage für {len(missing_ids)} fehlende Teilenummer(n)...")
|
||||
|
||||
@@ -93,20 +92,22 @@ def update_bezeichner(names_config):
|
||||
get_sivas_teilestamm(missing_ids)
|
||||
except Exception as e:
|
||||
print(f"Fehler bei der SIVAS-Abfrage: {e}")
|
||||
return
|
||||
|
||||
updated = 0
|
||||
|
||||
|
||||
for id in missing_ids:
|
||||
try:
|
||||
bezeichner = read_bezeichner_from_csv(id)
|
||||
if "Sivasnummern" not in names_config:
|
||||
names_config["Sivasnummern"] = {}
|
||||
names_config["Sivasnummern"][id] = bezeichner
|
||||
resolved_ids.append(id)
|
||||
updated += 1
|
||||
except Exception as e:
|
||||
print(f"WARNUNG: Bezeichner für {id} konnte nicht gelesen werden: {e}")
|
||||
|
||||
for id in missing_ids:
|
||||
for id in resolved_ids:
|
||||
names_config["Missing"].pop(id, None)
|
||||
|
||||
if "Missing" in names_config and not names_config["Missing"]:
|
||||
|
||||
Reference in New Issue
Block a user