[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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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))))
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user