fix: Geruest-Sivas-Export erzeugt eine Zeile je Artikelnummer statt Sammelzeile

Sivas kennt nur eine Sivasnr je Zeile - ARTINR (kommagetrennte Liste) wird
daher aufgesplittet. Gleiche Artikelnummern innerhalb derselben Baugruppe
werden zu einer Zeile mit Anzahl>1 zusammengefasst (wie bei Boegen/Weichen).
Jede resultierende Zeile traegt die volle LAENGE der Baugruppe.
This commit is contained in:
Michael Stangl
2026-09-14 14:55:30 +02:00
parent 1590f8f7ed
commit c5ae0bd769
+29 -17
View File
@@ -731,25 +731,37 @@ def process_blocks(blocks, lookup):
# Geruest-Baugruppen (GR_<id>_<timestamp>) - je Block eine eigene Zeile # Geruest-Baugruppen (GR_<id>_<timestamp>) - je Block eine eigene Zeile
# (siehe Kommentar bei geruest_list oben). Sivasnr kommt direkt aus dem # (siehe Kommentar bei geruest_list oben). Sivasnr kommt direkt aus dem
# ARTINR-Attribut - kann bereits mehrere, kommagetrennte Sivas-IDs # ARTINR-Attribut - kann mehrere, kommagetrennte Sivas-IDs enthalten
# enthalten (Baugruppe aus mehreren Einzelteilen, siehe ssg-join in # (Baugruppe aus mehreren Einzelteilen, siehe ssg-join in
# GeruestInsert.lsp), anders als bei den uebrigen Teilearten also KEIN # GeruestInsert.lsp) und dieselbe ID mehrfach (menge>1 je Einzelteil).
# fester Eintrag aus ILS_SIVASNR. # Anders als bei den uebrigen Teilearten also KEIN fester Eintrag aus
# ILS_SIVASNR - JEDE Artikelnummer bekommt ihre EIGENE Sivas-Zeile (Sivas
# kennt nur eine Sivasnr je Zeile), gleiche Artikelnummern INNERHALB
# derselben Baugruppe werden dabei zu einer Zeile mit anzahl>1
# zusammengefasst (wie bogen_groups/weiche_groups oben). Die volle
# LAENGE der Baugruppe steht auf JEDER so entstandenen Zeile - Sivas hat
# kein Konzept einer "gemeinsamen" Laenge ueber mehrere Zeilen hinweg.
for block in geruest_list: for block in geruest_list:
attribs = block.get("attribs", {}) attribs = block.get("attribs", {})
items.append({ artinr_list = [a.strip() for a in attribs.get("ARTINR", "").split(",") if a.strip()]
"nr": nr, artinr_groups = {}
"teileart": attribs.get("TEILEART", "Geruest"), for artinr in artinr_list:
"sivasnr": attribs.get("ARTINR", ""), artinr_groups.setdefault(artinr, 0)
"sivasnr_quoted": True, artinr_groups[artinr] += 1
"bezeichnung": attribs.get("BEZEICHNUNG", ""), for artinr, anzahl in artinr_groups.items():
"dispgruppe": 20, items.append({
"anzahl": 1, "nr": nr,
"laenge_mm": attribs.get("LAENGE", ""), "teileart": attribs.get("TEILEART", "Geruest"),
"ids": [get_id(block)], "sivasnr": artinr,
"details": build_geruest_details(block), "sivasnr_quoted": True,
}) "bezeichnung": attribs.get("BEZEICHNUNG", ""),
nr += 1 "dispgruppe": 20,
"anzahl": anzahl,
"laenge_mm": attribs.get("LAENGE", ""),
"ids": [get_id(block)],
"details": build_geruest_details(block),
})
nr += 1
# VarioFoerderer-Compound-Bloecke (VF_N) - je Block eine eigene Zeile mit # VarioFoerderer-Compound-Bloecke (VF_N) - je Block eine eigene Zeile mit
# vollstaendigen Gefaelle-/Angetrieben-Teilgruppen (immer TYP "Streckengruppe"). # vollstaendigen Gefaelle-/Angetrieben-Teilgruppen (immer TYP "Streckengruppe").