[CHANGE] eine zusätzliche csv für den Sivas export wird erstellt, die alle identischen Zeilen summiert und in einer Zeile mit neuer Anzahl schreibt; [ADD] Neue Gerüstkomponenten für die Baugruppenerstellung on the fly durch hinzugefügt; [CHANGE] Testskripte angepasst
This commit is contained in:
@@ -48,6 +48,11 @@ Argumente:
|
||||
Pruefung, wird von Sivas selbst nicht eingelesen.
|
||||
Schalter im Dialog CSV_EXPORT_KONFIG
|
||||
("Sivas Export mit Bezeichner"), Standard aus.
|
||||
|
||||
Zusaetzlich wird IMMER "<output>_zusammengefasst.csv" geschrieben: gleiches
|
||||
Format, aber Zeilen, die sich nur in Nr/Anzahl/IDs unterscheiden, sind zu
|
||||
einer Zeile zusammengefasst (Anzahl addiert, IDs vereinigt, Nr neu) - siehe
|
||||
items_zusammenfassen. output.csv selbst bleibt unveraendert.
|
||||
"""
|
||||
|
||||
import json
|
||||
@@ -921,6 +926,48 @@ def lesbarer_dateiname(output_csv):
|
||||
return f"{stamm}_mit_bezeichnung{endung}"
|
||||
|
||||
|
||||
def zusammengefasster_dateiname(output_csv):
|
||||
"""Leitet den Dateinamen der zusammengefassten Kopie aus output_csv ab,
|
||||
z.B. "500651_sivas.csv" -> "500651_sivas_zusammengefasst.csv"."""
|
||||
stamm, endung = os.path.splitext(output_csv)
|
||||
return f"{stamm}_zusammengefasst{endung}"
|
||||
|
||||
|
||||
def items_zusammenfassen(items):
|
||||
"""Fasst Zeilen zusammen, die sich nur in Nr, Anzahl und IDs
|
||||
unterscheiden: Anzahl wird addiert, die IDs werden (ohne Dubletten, in
|
||||
Reihenfolge des Auftretens) vereinigt, Nr wird neu durchgezaehlt.
|
||||
Reihenfolge der Gruppen = erstes Auftreten.
|
||||
|
||||
Betrifft in der Praxis vor allem die Geruest-Zeilen (je Block und
|
||||
Artikelnummer eine Zeile, siehe process_blocks) - die uebrigen Teilearten
|
||||
sind dort bereits gruppiert, und ihre Zeilen unterscheiden sich meist in
|
||||
Bezeichnung/details. Die Laenge gehoert zum Schluessel: Saeulen mit
|
||||
unterschiedlicher Laenge bleiben getrennte Zeilen.
|
||||
|
||||
Die Eingabe bleibt unveraendert (die Hauptdatei wird aus denselben
|
||||
items geschrieben)."""
|
||||
gruppen = {}
|
||||
for item in items:
|
||||
key = (
|
||||
item["teileart"], str(item["sivasnr"]), item["sivasnr_quoted"],
|
||||
item["bezeichnung"], item["dispgruppe"], str(item["laenge_mm"]),
|
||||
json.dumps(item["details"], ensure_ascii=False, sort_keys=True),
|
||||
)
|
||||
g = gruppen.get(key)
|
||||
if g is None:
|
||||
g = dict(item, anzahl=0, ids=[])
|
||||
gruppen[key] = g
|
||||
g["anzahl"] += safe_int(item["anzahl"], 0)
|
||||
for i in item.get("ids", []):
|
||||
if i and i not in g["ids"]:
|
||||
g["ids"].append(i)
|
||||
ergebnis = list(gruppen.values())
|
||||
for nr, g in enumerate(ergebnis, 1):
|
||||
g["nr"] = nr
|
||||
return ergebnis
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 4:
|
||||
print("Aufruf: python export_sivas.py <export_raw.json> <data_dir> <output.csv> [--mit-bezeichnung]")
|
||||
@@ -945,6 +992,17 @@ def main():
|
||||
f.write(format_csv_line(item) + "\n")
|
||||
print(f"[export_sivas] CSV geschrieben: {output_csv} ({len(items)} Zeilen)")
|
||||
|
||||
# Zusaetzliche Datei mit zusammengefassten identischen Zeilen (siehe
|
||||
# items_zusammenfassen) - output_csv selbst bleibt unveraendert.
|
||||
items_zus = items_zusammenfassen(items)
|
||||
output_csv_zus = zusammengefasster_dateiname(output_csv)
|
||||
with open(output_csv_zus, "w", encoding="utf-8") as f:
|
||||
f.write(header + "\n")
|
||||
for item in items_zus:
|
||||
f.write(format_csv_line(item) + "\n")
|
||||
print(f"[export_sivas] Zusammengefasste CSV geschrieben: {output_csv_zus} "
|
||||
f"({len(items_zus)} Zeilen)")
|
||||
|
||||
# Zweite, lesbare Kopie fuer die manuelle Pruefung (Merkmalnummer +
|
||||
# Bezeichnung aus cfg/Merkmalsstamm_in_Sivas.xlsx) - wird von Sivas
|
||||
# selbst NICHT eingelesen, nur output_csv ist der eigentliche Import.
|
||||
|
||||
Reference in New Issue
Block a user