[ADD] Geruest: Teile-DWGs (data/geruest/<artnr>.dwg) als Geometrie im GR_-Block; TEILEFARBE als Liste parallel zu ARTINR (Flag farbig in geruest.json), Sivas-Merkmal 108 aus cfg [Sivas]; Menue-Befehle GERUEST_SAEULEN/_ROHRABHAENGER/_WANDBEFESTIGUNG

[FIX] Sivas-Export las nicht existierendes Attribut FARBE
This commit is contained in:
Simon Hensch
2026-09-29 12:07:00 +02:00
parent 66c4336b9e
commit 4e39c64ec1
21 changed files with 637 additions and 383 deletions
+1
View File
@@ -4,6 +4,7 @@
{ "name": "linienzug", "save": "dwg", "module": "VarioFoerderer" },
{ "name": "vfl_schema", "module": "VarioFoerderer" },
{ "name": "vf_spec", "module": "VarioFoerderer" },
{ "name": "lastent", "module": "GeruestInsert" },
{ "name": "omniflo", "save": "dxf", "module": "OmniModulInsert" },
{ "name": "omniflo_strecke", "save": "dxf", "module": "OmniModulInsert" },
{ "name": "gefaellestrecke", "save": "dwg", "module": "Gefaellestrecke" },
+26
View File
@@ -101,3 +101,29 @@ def test_geruest_unveraendert():
assert zeilen["825002022"]["teileart"] == "Geruest Saeule 2 Zoll"
assert zeilen["825002022"]["ids"] == ["0060"]
assert zeilen["825002022"]["dispgruppe"] == 20
# Ohne TEILEFARBE kein Farb-Merkmal
assert zeilen["825002022"]["details"] == {}
def test_geruest_teilefarbe_je_artikelnummer():
zeilen = _zeilen([
_block("GR_Saeulen_20260929100000", "0061", "Geruest Saeule 2 Zoll",
"821006051,821004201,825002022,825002022",
TEILEFARBE=",RAL7030,RAL7030,RAL7030"),
])
merkmal = export_sivas.MERKMAL_TEILEFARBE
assert merkmal == "108"
assert zeilen["821006051"]["details"] == {}
assert zeilen["821004201"]["details"] == {merkmal: "RAL7030"}
assert zeilen["825002022"]["details"] == {merkmal: "RAL7030"}
assert zeilen["825002022"]["anzahl"] == 2
def test_geruest_teilefarbe_laenge_passt_nicht(capsys):
zeilen = _zeilen([
_block("GR_Saeulen_20260929100001", "0062", "Geruest Saeule 2 Zoll",
"821006051,821004201", TEILEFARBE="RAL7030"),
])
assert zeilen["821006051"]["details"] == {}
assert zeilen["821004201"]["details"] == {}
assert "TEILEFARBE" in capsys.readouterr().err
+2 -2
View File
@@ -256,7 +256,7 @@
;; Wie c:VarioFoerderer: Attribut-Entities/SEQEND des vorherigen
;; VF_N-Blocks ueberspringen, sonst rutschen sie in den naechsten
;; Block hinein (Blockerstellung faengt sonst am falschen Entity an).
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(setq gf-split (foerderer:split-gf gf-verteilung L_GF))
(setq lastEnt
(foerderer:baue-block startpunkt blk-nummer hoehe-von hoehe-bis
@@ -300,7 +300,7 @@
(setq blk-nummer (1+ blk-nummer))
(setq hoehe-von 0)
(setq hoehe-bis (- deltaH))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
;; seite/gf-verteilung vom Elternfall erben (gleicher
;; Foerderer); winkel-soll ist hier nicht anwendbar -
;; berechne-horizontale-mitte hat keine Winkel-Kandidatenliste
+1 -1
View File
@@ -193,7 +193,7 @@
;; 7. GF-Nummer und Entity-Grenze vor erster Einfuegung
(setq gf-nummer (gf-next-number))
(setq last-ent (vf-lastent-ohne-attribute))
(setq last-ent (ssg-lastent-ohne-attribute))
;; 8. AUS-Element einfuegen
;; KS_EIN-Richtung so, dass KS_AUS in entry-hz zeigt:
+1 -1
View File
@@ -183,7 +183,7 @@
" L_GF2=" (rtos gf2 2 1)))
(setq hoehe-bis (if (= richtung "Auf") deltaH (- deltaH)))
(setq lastEnt (vf-lastent-ohne-attribute))
(setq lastEnt (ssg-lastent-ohne-attribute))
(if (= typ "etage")
(etage-foerderanlage-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz)
(variofoerderer-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz))
+44
View File
@@ -823,6 +823,21 @@
(geruest-artikelnummern
(ssg-json-parse "{\"artikel\": \"C\", \"sivas_id\": 333}")))
;; --- Teile-DWGs (visuelle Rueckmeldung im Block) ---
(tu-eq "geruest-eindeutig/dupl" '("1" "2" "3")
(geruest-eindeutig '("1" "2" "1" "3" "2")))
(tu-eq "geruest-eindeutig/leer" nil (geruest-eindeutig nil))
;; Artikelnummer ohne DWG -> still uebergangen
(tu-eq "geruest-teile-dwgs/fehlt" nil
(geruest-teile-dwgs '("999999999")))
;; Vorhandene DWG (liegt im Repo) -> genau ein Pfad, auch bei Mehrfach-
;; Stueckzahl und gemischt mit einer fehlenden Nummer
(setq _pfad (geruest-dummy-pfad "825002019.dwg"))
(if (and _pfad (findfile _pfad))
(tu-eq "geruest-teile-dwgs/vorhanden" (list _pfad)
(geruest-teile-dwgs '("825002019" "999999999" "825002019")))
)
;; --- Mengenfeld ---
(tu-eq "geruest-zahl-p/ziffern" T (geruest-zahl-p "12"))
(tu-eq "geruest-zahl-p/text" nil (geruest-zahl-p "1a"))
@@ -841,6 +856,35 @@
(tu-eq "geruest-artnr-n/gruppe" '("111" "222" "222" "111" "222" "222")
(geruest-artikelnummern-n _gruppe 2))
;; --- farbig-Flag / TEILEFARBE-Liste parallel zu ARTINR ---
;; _eintrag hat kein "farbig" -> nicht farbig
(tu-eq "geruest-paare/ohne-flag" '(("825002019") ("825002019"))
(geruest-teile-paare _eintrag nil))
(tu-eq "geruest-paare/farbig" '(("444" . T))
(geruest-teile-paare
(ssg-json-parse "{\"artikel\": \"D\", \"sivas_id\": 444, \"farbig\": true}")
nil))
(tu-eq "geruest-paare/false" '(("555"))
(geruest-teile-paare
(ssg-json-parse "{\"artikel\": \"E\", \"sivas_id\": 555, \"farbig\": false}")
nil))
;; Gruppe mit farbig vererbt an alle Teile, Mengen bleiben erhalten
(setq _teile (ssg-json-parse
(strcat "{\"name\": \"Set\", \"farbig\": true, \"teile\": ["
"{\"artikel\": \"A\", \"sivas_id\": 111},"
"{\"artikel\": \"B\", \"sivas_id\": 222, \"menge\": 2}]}")))
(tu-eq "geruest-paare/gruppe-erbt" '(("111" . T) ("222" . T) ("222" . T))
(geruest-teile-paare _teile nil))
(tu-eq "geruest-paare-n/gruppe" 6 (length (geruest-teile-paare-n _teile 2)))
(tu-eq "geruest-paare-n/einzelteil-farbig" '(("444" . T) ("444" . T))
(geruest-teile-paare-n
(ssg-json-parse "{\"artikel\": \"D\", \"sivas_id\": 444, \"farbig\": true}")
2))
(tu-eq "geruest-farbliste" '("" "RAL7030" "")
(geruest-farbliste '(("1") ("2" . T) ("3")) "RAL7030"))
(tu-eq "geruest-farbliste/join" ",RAL7030,"
(ssg-join (geruest-farbliste '(("1") ("2" . T) ("3")) "RAL7030") ","))
;; --- DCL-Label: Anfuehrungszeichen wuerde die Datei zerstoeren ---
(tu-eq "geruest-dcl-label/quote" "ROHRKLAMMER 1'' KPL. VERTIKAL"
(geruest-dcl-label "ROHRKLAMMER 1\" KPL. VERTIKAL"))