[CHANGE] Sivas Export schaut nun nur noch auf die kommaseparierte Liste im Attribut ARTINR und fügt die Artikelnummern in die Export-Liste ein; [ADD] Menü und dwg für Omniflo Ladeschleifen

This commit is contained in:
Simon Hensch
2026-09-28 13:53:46 +02:00
parent 5a13595289
commit dabf9e4f8a
18 changed files with 663 additions and 385 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ class TestSivasSchliesstAus:
_block("Eingang_2D", "0050"),
_block("Ausgang_3D", "0051"),
]
items, counters = export_sivas.process_blocks(blocks, lookup={})
items, counters = export_sivas.process_blocks(blocks)
arten = {it.get("teileart", "") for it in items}
assert "Eingang" not in arten
+103
View File
@@ -0,0 +1,103 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
test_export_sivas_omniflo.py - Omniflo-Zeilen im Sivas-Export.
Laeuft komplett ohne BricsCAD (reine Python-Logik).
Omniflo-Elemente werden ueber das TEILEART-Attribut erkannt, ihre Sivas-
Nummern kommen - wie beim Geruest - ausschliesslich aus dem ARTINR-Attribut
(kommagetrennt, TEF-Teile dort bereits aufgeloest). Kein Katalog-Lookup.
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
import export_sivas # noqa: E402
def _block(block_name, teileid, teileart=None, artinr=None, **extra):
attribs = {"ID": teileid}
if teileart is not None:
attribs["TEILEART"] = teileart
if artinr is not None:
attribs["ARTINR"] = artinr
attribs.update(extra)
return {"block_name": block_name, "x": 0.0, "y": 0.0, "z": 0.0,
"rotation": 0.0, "attribs": attribs}
def _zeilen(blocks):
items, _ = export_sivas.process_blocks(blocks)
return {it["sivasnr"]: it for it in items}
def test_einfache_teile_je_nummer_eine_zeile():
zeilen = _zeilen([
_block("834372027", "0001", "Omniflo Einzelweiche", "834372027"),
_block("834372027", "0002", "Omniflo Einzelweiche", "834372027"),
_block("821104033", "0003", "Omniflo Bogen", "821104033"),
])
assert zeilen["834372027"]["teileart"] == "Omniflo Einzelweiche"
assert zeilen["834372027"]["anzahl"] == 2
assert zeilen["834372027"]["ids"] == ["0001", "0002"]
assert zeilen["821104033"]["teileart"] == "Omniflo Bogen"
assert zeilen["821104033"]["anzahl"] == 1
def test_mehrteilige_weiche_mit_tef():
zeilen = _zeilen([
_block("834372002+0_BG090090", "0010", "Omniflo Einzelweiche",
"834372002, 0_B10090, 0_B10090"),
])
assert zeilen["834372002"]["anzahl"] == 1
assert zeilen["834372002"]["ids"] == ["0010.t1"]
assert zeilen["0_B10090"]["teileart"] == "Omniflo TEF"
assert zeilen["0_B10090"]["anzahl"] == 2
assert zeilen["0_B10090"]["ids"] == ["0010.t2", "0010.t3"]
def test_tef_teil_aus_bogen_und_weiche_in_einer_zeile():
items, _ = export_sivas.process_blocks([
_block("821104025+0_B10090", "0020", "Omniflo Bogen", "821104025, 0_B10090"),
_block("834372002+0_BG090090", "0021", "Omniflo Einzelweiche",
"834372002, 0_B10090, 0_B10090"),
])
tef = [it for it in items if it["sivasnr"] == "0_B10090"]
assert len(tef) == 1
assert tef[0]["anzahl"] == 3
def test_ladeschleife_wird_exportiert():
zeilen = _zeilen([
_block("824331125", "0030", "Omniflo Ladeschleife", "824331125"),
])
assert zeilen["824331125"]["teileart"] == "Omniflo Ladeschleife"
def test_omniflo_ohne_artinr_warnt_und_fehlt(capsys):
items, _ = export_sivas.process_blocks([
_block("834372027", "0040", "Omniflo Einzelweiche", ""),
])
assert items == []
assert "ohne ARTINR" in capsys.readouterr().err
def test_block_ohne_teileart_wird_ignoriert():
items, _ = export_sivas.process_blocks([
_block("Scanner", "0050", artinr=""),
_block("827064041", "0051", artinr="827064041"),
])
assert items == []
def test_geruest_unveraendert():
zeilen = _zeilen([
_block("GR_Saeulen_20260928112449", "0060", "Geruest Saeule 2 Zoll",
"821006051,821004201,825002022,825002022", LAENGE="2500"),
])
assert zeilen["825002022"]["anzahl"] == 2
assert zeilen["825002022"]["teileart"] == "Geruest Saeule 2 Zoll"
assert zeilen["825002022"]["ids"] == ["0060"]
assert zeilen["825002022"]["dispgruppe"] == 20
+23
View File
@@ -503,6 +503,29 @@
(tu-eq "csv:export-modus-setzen/ungueltig-ignoriert" "separator_track" *csv-export-modus*)
(csv:export-modus-setzen _modus-alt)
;; --- Gefrorene Layer: Schalter + Hilfskopien-Ausschluss (file-frei) ---
;; Records (hilfsobjekt wrapper ...) mit Symbolen als Stand-ins fuer
;; Entities; das Praedikat ersetzt ssg-ent-layer-gefroren-p.
(setq _gef-alt (csv:gefrorene-ausschliessen-p))
(csv:gefrorene-ausschliessen-setzen T)
(tu-true "csv:gefrorene-ausschliessen/an" (csv:gefrorene-ausschliessen-p))
(csv:gefrorene-ausschliessen-setzen nil)
(tu-nil "csv:gefrorene-ausschliessen/aus" (csv:gefrorene-ausschliessen-p))
(csv:gefrorene-ausschliessen-setzen _gef-alt)
(setq _gef-recs '((sep1 vf1 "SEP") (sep2 vf2 "SEP") (mark1 vf1 "AS") (unit1 gf1 "E" 1)))
(tu-eq "csv:hilfskopien-ausschluss/wrapper-vf1-gefroren" '(sep1 mark1)
(csv:hilfskopien-ausschluss _gef-recs (function (lambda (w) (eq w 'vf1)))))
(tu-eq "csv:hilfskopien-ausschluss/zwei-wrapper" '(sep2 unit1)
(csv:hilfskopien-ausschluss _gef-recs
(function (lambda (w) (member w '(vf2 gf1))))))
(tu-nil "csv:hilfskopien-ausschluss/nichts-gefroren"
(csv:hilfskopien-ausschluss _gef-recs (function (lambda (w) nil))))
(tu-nil "csv:hilfskopien-ausschluss/leere-liste"
(csv:hilfskopien-ausschluss nil (function (lambda (w) T))))
(tu-nil "csv:hilfskopien-ausschluss/record-ohne-wrapper"
(csv:hilfskopien-ausschluss '((sep1)) (function (lambda (w) T))))
)