Compare commits
38 Commits
58b16509da
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b2127b70c9 | |||
| db46c38ac6 | |||
| af69b98365 | |||
| 87ff81d001 | |||
| cbc2afa9e1 | |||
| 47e70d952e | |||
| 5a1fa5a7e4 | |||
| 4defeb11f0 | |||
| 2591d78716 | |||
| ac99ca73a5 | |||
| 17cbd61fb4 | |||
| f18f8cae2d | |||
| 7fb778125b | |||
| a279c581e3 | |||
| aa73ffb444 | |||
| 61cd933de3 | |||
| 9ef23a735a | |||
| 089dadd52b | |||
| 9f5f4150f1 | |||
| c64327cbe7 | |||
| 9e25ca15bc | |||
| 754ae39364 | |||
| 6590674d8e | |||
| 6c31b9fbf3 | |||
| f5cc53253e | |||
| cf4b632cba | |||
| 95fb80dd57 | |||
| b7fd1da5b8 | |||
| e342ace5c3 | |||
| fb710b73e0 | |||
| c813a8fc1b | |||
| f8b895cec7 | |||
| cb20f31f10 | |||
| a6a7d9c3e9 | |||
| 05709677ac | |||
| 54606dce88 | |||
| 2f2dd83e2b | |||
| 0eda150f8b |
Vendored
+18
-13
@@ -9,27 +9,32 @@
|
||||
|
||||
{
|
||||
"name": "Python: Aktuelle Datei",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python: CompareLists",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": true,
|
||||
"args": [
|
||||
"-n 400102196",
|
||||
"-t"
|
||||
"400102530",
|
||||
"tree",
|
||||
"--local_bom",
|
||||
"--local_teilestamm",
|
||||
"--local_rd_ids",
|
||||
"--rm_bom_ids_cfg", "C:\\Users\\s.steuer\\Documents\\Pythonprojekte\\CreoMigrate\\cfg\\BOM-Settings.cfg", "ExcludedPartnumbersInBOM",
|
||||
"--rm_summary_ids_cfg", "C:\\Users\\s.steuer\\Documents\\Pythonprojekte\\CreoMigrate\\cfg\\BOM-Settings.cfg", "ExcludedPartnumbersInSummary"
|
||||
],
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python: create TOS sring",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
@@ -37,10 +42,10 @@
|
||||
"args": [
|
||||
"--console"
|
||||
],
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "fetch blacklist from server",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
@@ -48,10 +53,10 @@
|
||||
"args": [
|
||||
"--blacklist"
|
||||
],
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python: Build Demo Gui",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
@@ -59,10 +64,10 @@
|
||||
"args": [
|
||||
"-d"
|
||||
],
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Python: Build Real Gui",
|
||||
"type": "python",
|
||||
"type": "debugpy",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
"console": "integratedTerminal",
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Projektübersicht
|
||||
|
||||
**CreoMigrate** enthält Skripte zur Migration von Creo-Altdaten nach Solid Edge / Rule
|
||||
Designer. Ziel ist es, alte 3D-Daten aus Creo mit aktuellen SIVAS-Informationen in die
|
||||
neue Konstruktionsumgebung zu überführen. Der Fokus liegt auf automatisierbaren Prozessen
|
||||
mit wenig Nutzereingriff (Datenbank-Abgleich, Listenvergleich, TOS-String-Erzeugung).
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```text
|
||||
CreoMigrate/
|
||||
├── bin/ # Nummerierte Workflow-Batch-Skripte (01..06) + GUI/Setup
|
||||
├── lib/ # Python-Quellcode
|
||||
├── Include/ # Zusätzliche Includes
|
||||
├── cfg/ # Konfiguration
|
||||
├── data/ # Datenbanken / Eingabedaten
|
||||
├── doc/ # Dokumentation
|
||||
├── log/ # Log-Dateien
|
||||
└── work/ # Arbeitsdateien
|
||||
```
|
||||
|
||||
## Workflow-Skripte (bin/)
|
||||
|
||||
Die Batch-Skripte sind in Ausführungsreihenfolge nummeriert:
|
||||
|
||||
1. `01_get_rd_dbase.bat` — Rule-Designer-Bestand ableiten
|
||||
2. `02_get_sivas_dbase.bat` — SIVAS-Datenbank ableiten
|
||||
3. `03_get_blacklist_dbase.bat` — Blacklist erzeugen
|
||||
4. `04_compare_lists.bat` — Listen vergleichen
|
||||
5. `05_get_sivas_teilestamm.bat` — Teilestamm aus SIVAS
|
||||
6. `06_migrationsstatus_treeview.bat` — Migrationsstatus als Treeview
|
||||
|
||||
Weitere: `gui.bat` (GUI), `create_tos_string.bat` / `write_tos_string_to_file.bat`
|
||||
(TOS-Strings), `install_py.bat`, `cremig_setenv.bat`, `get_cmd.bat`.
|
||||
|
||||
## Kernmodule (lib/)
|
||||
|
||||
- `CreoMigrateGui.py`, `gui.py`, `controller.py` — GUI + Steuerung (Tkinter)
|
||||
- `compare_lists.py` — Listenvergleich
|
||||
- `create_tos.py` — TOS-String-Erzeugung
|
||||
- `caditem.py` — Datenmodell CAD-Item
|
||||
- `update_database.py`, `manage_configs.py` — DB/Config
|
||||
- `test_*.py` — Tests
|
||||
|
||||
## Setup
|
||||
|
||||
```cmd
|
||||
bin\install_py.bat
|
||||
```
|
||||
Legt die virtuelle Umgebung an und installiert `lib/requirements.txt`.
|
||||
@@ -29,5 +29,5 @@ Vorteile:
|
||||
- Loslösen von Excel als Bedienumgebung, somit nicht an Version oder Hersteller gebunden.
|
||||
- Problemloseres Ausrollen auf mehrere Benutzer
|
||||
|
||||
|
||||
|
||||
Installationsvoraussetzungen:
|
||||
- Tabellenkalkulationsprogramm (Excel) in 64-Bit Version -> Dies ist wichtig, da unter 32-Bit das Migrationstool von Siemens (DataPrep-Tool) nicht korrekt funktioniert!
|
||||
@@ -1,5 +1,5 @@
|
||||
@echo off
|
||||
IF "%1" == "-s" (set SIVAS_ID=%2) else (set /p SIVAS_ID=Enter Sivas ID:)
|
||||
CALL manage_interpreter.bat activate_interpreter
|
||||
python %CREMIG_LIB%\update_database.py --sivasid=%SIVAS_ID%
|
||||
python %CREMIG_LIB%\update_database.py --sivasid=%SIVAS_ID% --bom
|
||||
CALL manage_interpreter.bat deactivate_interpreter
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@echo off
|
||||
CALL cremig_setenv.bat
|
||||
:start
|
||||
set /p "id=Artikelnummer: "
|
||||
CALL 04_compare_lists.bat "%id%" tree --rm_bom_ids_cfg %CREMIG_CFG%\BOM-Settings.cfg ExcludedPartnumbersInBOM --rm_summary_ids_cfg %CREMIG_CFG%\BOM-Settings.cfg ExcludedPartnumbersInSummary
|
||||
CALL 04_compare_lists.bat "%id%" tree --rm_bom_ids_cfg %CREMIG_CFG%\BOM-Settings.cfg ExcludedPartnumbersInBOM --rm_summary_ids_cfg %CREMIG_CFG%\BOM-Settings.cfg ExcludedPartnumbersInSummary
|
||||
goto start
|
||||
|
||||
@@ -10,6 +10,10 @@ set CREMIG_DATA=%CREMIG%\data
|
||||
set CREMIG_WORK=%CREMIG%\work
|
||||
set CREMIG_LOG=%CREMIG%\log
|
||||
|
||||
rem Hilfsvariable um den Programmpfad zu Solid Egde immer an die aktuelle Version anzupassen. Dieser ändert sich jedesmal beim Update der Jahresversionen (Solid Edge hängt immer die Jahreszahl der Version im Ordnernamen an).
|
||||
rem Deshalb muss dieser Pfad möglichst automatisch ausgelesen werden. Da auch immer das Programm Keyshot in diesem Zuge mitinstalliert wird, konnte eine Umgebungsvariable gefunden werden, die denselben Pfad verwendet wie die DataPrepUtility.exe
|
||||
set SOLIDEDGE_VERSION=%KEYSHOT_EXTERNAL_LICENSE_FOLDER%
|
||||
|
||||
if not exist %CREMIG%\work mkdir %CREMIG%\work
|
||||
if not exist %CREMIG%\log mkdir %CREMIG%\log
|
||||
if not exist %CREMIG%\data mkdir %CREMIG%\data
|
||||
@@ -30,7 +34,7 @@ set VBA_MACRO_NAME=vba_format_excel.xlsm
|
||||
set SIVAS_BOM=Y:\jit\programme\Sivas2json.exe
|
||||
set SIVAS_TEILESTAMM=\\195.243.223.3\sivas\jit\programme\KSbExcelExportSivasTeilestamm.exe
|
||||
set SIVAS_EXCEL_EXPORT_DIR=%CREMIG_DATA%
|
||||
set SIEMENS_DATA_PREP_TOOL=C:\Program Files\Siemens\Solid Edge 2023\Program\DataPrepUtility.exe
|
||||
set SIEMENS_DATA_PREP_TOOL=%SOLIDEDGE_VERSION%\DataPrepUtility.exe
|
||||
set LOG_EDITOR=notepad.exe
|
||||
set RD_SQL_DATABASE_CREDENTIALS=\\fileserver01\abteilungen\Entwicklung\Administration\Lizenzen\RDSQLDatabaseCredentials.bat
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ deactivate
|
||||
goto :eof
|
||||
|
||||
:activate_interpreter_network
|
||||
ECHO Initialisiere Python-Interpreter in %NETWORK_INTERPRETER_PATH%...
|
||||
SET OLD_PATH=%PATH%
|
||||
SET PATH=%NETWORK_INTERPRETER_PATH%;%PATH%
|
||||
goto :eof
|
||||
|
||||
@@ -9,11 +9,11 @@ set "Namensanfang=TOS-Gruppenstring_"
|
||||
set "Dateiname=%Namensanfang%!datetime!.txt"
|
||||
|
||||
REM Führe die folgende .bat aus mit dem gesetzten Schalter -o um eine Datei mit dem Code zu generieren
|
||||
CALL %CREMIG_BIN%create_tos_string.bat -o %Dateiname%
|
||||
CALL %CREMIG_BIN%\create_tos_string.bat -o %Dateiname%
|
||||
|
||||
echo Die Datei wurde in %CREMIG_WORK% mit dem Namen: %Dateiname% gespeichert
|
||||
echo Bitte pflegen sie den Inhalt dieser Datei in die jeweiligen CampiEsterni.ini unter CALC LINK10 ein.
|
||||
echo:
|
||||
|
||||
endlocal
|
||||
pause
|
||||
pause
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
#============================================================================================================================
|
||||
|
||||
MA0000008
|
||||
|
||||
MA0000005
|
||||
|
||||
[ExcludedPartnumbersInSummary]
|
||||
#============================================================================================================================
|
||||
# Teilenummern, die in der Zusammenfassung der Migrationsübersicht nicht enthalten sein sollen
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
[Farbauswahl]
|
||||
PANTONE 2175 C
|
||||
RAL 1004 Goldgelb
|
||||
RAL 2000 Gelborange
|
||||
RAL 3002 Kaminrot
|
||||
@@ -23,6 +24,7 @@ Grün
|
||||
Blau
|
||||
siehe Oben
|
||||
Ocker
|
||||
Transparent
|
||||
|
||||
[FarbeEloxieren]
|
||||
Rot
|
||||
|
||||
+115
-97
@@ -1,8 +1,32 @@
|
||||
{
|
||||
"VA": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"1.4301": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X5CrNi18-10": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"1.4301 (X5CrNi18-10)": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"1.4301f / 59381": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X5CrNi 18-10": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X5CrNi 18-9": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"1.4305": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
@@ -15,14 +39,42 @@
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X10CrNiS 18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X8CrNiS 18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X8CrNiS18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X12CrNi17 7": {
|
||||
"Werkstoff": "1.4310 (X10CrNi18-8)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"Aluminium": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"AlCuMgPb": {
|
||||
"Werkstoff": "EN AW-2007 (3.1645)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"3.3206.72": {
|
||||
"Werkstoff": "EN AW-6063-T66",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlSiMg 0,5 F25": {
|
||||
"Werkstoff": "EN AW-6063-T66",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"F25": {
|
||||
"Werkstoff": "EN AW-6063-T66",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlMgSi0.5": {
|
||||
"Werkstoff": "EN AW-6060 (3.3206)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
@@ -31,25 +83,37 @@
|
||||
"Werkstoff": "EN AW-6060 (3.3206)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlSiMg 0,5 F22": {
|
||||
"AlMgSi 0.5": {
|
||||
"Werkstoff": "EN AW-6060 (3.3206)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlMgSi0.5 F22": {
|
||||
"Werkstoff": "EN AW-6060-T66 (3.3206-T66)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlSiMg 0,5 F25": {
|
||||
"Werkstoff": "EN AW-6063-T66",
|
||||
"AlSiMg 0,5 F22": {
|
||||
"Werkstoff": "EN AW-6060-T66 (3.3206-T66)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlMg3": {
|
||||
"Werkstoff": "EN AW-5754 (3.3535)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"St": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"C45": {
|
||||
"Werkstoff": "1.0503 (C45)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"F25": {
|
||||
"Werkstoff": "EN AW-6063-T66",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
"Ck60": {
|
||||
"Werkstoff": "1.1221 (C60E)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"S355JO": {
|
||||
"Werkstoff": "1.0553 (S355J0)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"1.0038 (S235JR)": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
@@ -63,18 +127,6 @@
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"S235JRG2C": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"S235JRG2C+C": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"S235JR+Cr": {
|
||||
"Werkstoff": "1.0038+CR (S235JR+CR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"St-37": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
@@ -83,26 +135,35 @@
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X5CrNi18-10": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"S235 JR": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X8CrNiS 18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"S235JR galv. verzinkt Fe/Zn 8-15 B": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl",
|
||||
"Oberfläche": "verzinken"
|
||||
},
|
||||
"S235JR+Cr": {
|
||||
"Werkstoff": "1.0038+CR (S235JR+CR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X8CrNiS18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"S235JRG2C": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"1.4301 (X5CrNi18-10)": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"S235JRG2C+C": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X5CrNi 18-10": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"S235JRC": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"Kunststo": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"PA6 GF30": {
|
||||
"Werkstoff": "PA 6 GF 30",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
@@ -130,14 +191,15 @@
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)"
|
||||
},
|
||||
"S235JR galv. verzinkt Fe/Zn 8-15 B": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl",
|
||||
"Oberfläche": "verzinken"
|
||||
"PA 66 GF 50": {
|
||||
"Werkstoff": "PA 66 GF 50",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)"
|
||||
},
|
||||
"VA": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
"PC GF 10": {
|
||||
"Werkstoff": "PC GF 10",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)"
|
||||
},
|
||||
"POM schw": {
|
||||
"Werkstoff": "POM",
|
||||
@@ -151,12 +213,24 @@
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Schwarz"
|
||||
},
|
||||
"POM sch": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Schwarz"
|
||||
},
|
||||
"POM weiß": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Weiß"
|
||||
},
|
||||
"POM natur": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Natur"
|
||||
},
|
||||
"POM": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
@@ -172,11 +246,13 @@
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)"
|
||||
},
|
||||
"-": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
"PUR D44 ": {
|
||||
"Werkstoff": "Bitte individuell wählen!",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Bitte individuell wählen!"
|
||||
},
|
||||
"St": {
|
||||
"-": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
@@ -184,10 +260,6 @@
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"S235 JR": {
|
||||
"Werkstoff": "1.0038 (S235JR)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"-----": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
@@ -216,62 +288,8 @@
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"AlCuMgPb": {
|
||||
"Werkstoff": "EN AW-2007 (3.1645)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"AlMgSi 0.5": {
|
||||
"Werkstoff": "EN AW-6060 (3.3206)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"Kunststo": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"Federsta": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"S355JO": {
|
||||
"Werkstoff": "1.0553 (S355J0)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"X10CrNiS 18-9": {
|
||||
"Werkstoff": "1.4305 (X8CrNiS18-9)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"POM natur": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Natur"
|
||||
},
|
||||
"POM sch": {
|
||||
"Werkstoff": "POM",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Schwarz"
|
||||
},
|
||||
"1.4301f / 59381": {
|
||||
"Werkstoff": "1.4301 (X5CrNi18-10)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
},
|
||||
"PUR D44 ": {
|
||||
"Werkstoff": "Bitte individuell wählen!",
|
||||
"Werkstofftyp": "Kunst-/ Verbundstoff",
|
||||
"Oberfläche": "Masterbatch (Grundfarbe)",
|
||||
"Farbe": "Bitte individuell wählen!"
|
||||
},
|
||||
"Aluminium": {
|
||||
"Werkstoff": "false",
|
||||
"Message": "Bitte individuell wählen!"
|
||||
},
|
||||
"AlMgSi0.5 F22": {
|
||||
"Werkstoff": "EN AW-6060-T66 (3.3206-T66)",
|
||||
"Werkstofftyp": "Aluminium"
|
||||
},
|
||||
"S235JRC": {
|
||||
"Werkstoff": "1.0122 (S235JRC)",
|
||||
"Werkstofftyp": "Stahl"
|
||||
}
|
||||
}
|
||||
|
||||
+11
-2
@@ -238,7 +238,7 @@
|
||||
"43": "Sensorik",
|
||||
"44": "Kabel",
|
||||
"45": "Installationsmaterial",
|
||||
"46": "Frei",
|
||||
"46": "Divers",
|
||||
"47": "Frei",
|
||||
"48": "Frei",
|
||||
"49": "Sonstiges"
|
||||
@@ -250,6 +250,7 @@
|
||||
"43": "TOS_Automation_Sensorik",
|
||||
"44": "TOS_Kabel",
|
||||
"45": "TOS_Installation",
|
||||
"46": "TOS_Auto_Divers",
|
||||
"49": "TOS_Automation_Sonstiges"
|
||||
}
|
||||
},
|
||||
@@ -366,9 +367,17 @@
|
||||
},
|
||||
"reference-ids": {}
|
||||
},
|
||||
"TOS_Auto_Divers": {
|
||||
"TOS-level": 3,
|
||||
"_comment" : "46 - Automation -> Divers",
|
||||
"children": {
|
||||
"460": "Auswahl Lichttaster"
|
||||
},
|
||||
"reference-ids": {}
|
||||
},
|
||||
"TOS_Automation_Sonstiges": {
|
||||
"TOS-level": 3,
|
||||
"_comment" : "45 - Automation -> Sonstiges",
|
||||
"_comment" : "49 - Automation -> Sonstiges",
|
||||
"children": {
|
||||
"490": "Beschriftung",
|
||||
"491": "Schüttgut"
|
||||
|
||||
@@ -24,6 +24,7 @@ Schwermetall
|
||||
1.0715+C (11SMn30+C)
|
||||
1.0917 (DX51D+Z)
|
||||
1.1191 (C45E)
|
||||
1.1221 (C60E)
|
||||
1.2842 (90MnCrV8)
|
||||
1.4035 (X45CrS13)
|
||||
1.4301 (X5CrNi18-10)
|
||||
@@ -31,6 +32,7 @@ Schwermetall
|
||||
1.4310 (X10CrNi18-8)
|
||||
1.5023 (38Si7)
|
||||
1.7131 (16MnCr5)
|
||||
1.7225 (42CrMo4)
|
||||
siehe Hersteller
|
||||
siehe Stückliste
|
||||
|
||||
@@ -54,6 +56,7 @@ CR/SBR-A65
|
||||
Hostaform 13031 MB1.5
|
||||
Irogran A87
|
||||
Murtfeldt "S" 1000
|
||||
Murtfeldt Original "S" grün
|
||||
PA
|
||||
PA 2200
|
||||
PA 2200 SLS
|
||||
@@ -63,13 +66,16 @@ PA 6 GF 30
|
||||
PA 66
|
||||
PA 66 GF 25
|
||||
PA 66 GF 30
|
||||
PA 66 GF 50
|
||||
PA GF 25
|
||||
PBT
|
||||
PC
|
||||
PC GF 10
|
||||
PE
|
||||
PE-HD
|
||||
PE-LD
|
||||
PE-UHMW
|
||||
PE-UHMW antistatisch
|
||||
POM
|
||||
POM-C
|
||||
POM-H
|
||||
@@ -83,13 +89,16 @@ PUR
|
||||
PUR - 95 Shore A
|
||||
PUR D44 - 80 Shore A
|
||||
PVC
|
||||
PVC-P (weich)
|
||||
PVC-U
|
||||
siehe Hersteller
|
||||
siehe Stückliste
|
||||
TPU
|
||||
TPU - 95 Shore A
|
||||
TPU - 98 Shore A
|
||||
|
||||
[Schwermetall]
|
||||
CC493K - GC (CuSn7Zn4Pb7 - C - GC)
|
||||
CW459K (CuSn8P)
|
||||
CW614N (CuZn39Pb3)
|
||||
CW708R (CuZn31Si)
|
||||
|
||||
@@ -8,10 +8,10 @@ Dispoinaktiv=ACHTUNG BG mit dispoinaktiven Stücklistenpositionen. Es wird keine
|
||||
|
||||
[ComboTextblöcke]
|
||||
KleinbuchstabeTruemmer=ACHTUNG Index in Sivas mit Kleinbuchstaben + Trümmerbaugruppe. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
KleinbuchstabeBlacklist=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
KleinbuchstabeBlacklistBG=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
KleinbuchstabeWerkstoffdiskrepanz=ACHTUNG Index in Sivas mit Kleinbuchstaben + Materialdiskrepanz. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
KleinbuchstabeDispoinaktiv=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Dispoinaktiven Stücklistenpositionen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
TruemmerBlacklist=ACHTUNG Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
TruemmerBlacklistBG=ACHTUNG Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
TruemmerWerkstoffdiskrepanz=ACHTUNG Trümmerbaugruppe + Materialdiskrepanz. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
TruemmerDispoinaktiv=ACHTUNG Trümmerbaugruppe + BG mit dispoinaktiven Stücklistenpositionen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
KleinbuchstabeTruemmerBlacklist=ACHTUNG Index in Sivas mit Kleinbuchstaben + Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien
|
||||
@@ -20,8 +20,8 @@ BlacklistHZDispoinaktiv=ACHTUNG Bearbeitetes Halbzeug mit beigestellten und disp
|
||||
BlacklistBGDispoinaktiv=ACHTUNG BG mit beigestellten und dispoinaktiven Stücklistenpositionen. Es wird keine Stückliste übergeben. Diese muss bei einer Änderung händisch angelegt und archiviert werden. Hierfür die Verantwortlichen für den Teilestamm informieren.
|
||||
|
||||
;Nachfolgende Kombinationen können nicht auftreten:
|
||||
;- BlacklistWerkstoffdiskrepanz
|
||||
;- BlacklistBGWerkstoffdiskrepanz
|
||||
;- KleinbuchstabeTruemmerWerkstoffdiskrepanz
|
||||
;- KleinbuchstabeBlacklistWerkstoffdiskrepanz
|
||||
;- TruemmerBlacklistWerkstoffdiskrepanz=
|
||||
;- KleinbuchstabeTruemmerBlacklistWerkstoffdiskrepanz=
|
||||
;- KleinbuchstabeBlacklistBGWerkstoffdiskrepanz
|
||||
;- TruemmerBlacklistBGWerkstoffdiskrepanz
|
||||
;- KleinbuchstabeTruemmerBlacklistBGWerkstoffdiskrepanz
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
[Fenster]
|
||||
CanvasBreite=1080
|
||||
CanvasHoehe=1490
|
||||
Dimension=1080x1490
|
||||
#Büro-Auflösung (hochformat)
|
||||
CanvasBreite=1080
|
||||
CanvasHoehe=1490
|
||||
Dimension=1080x1490
|
||||
|
||||
# Homeoffice Auflösung (querformat)
|
||||
# CanvasBreite=1000
|
||||
# CanvasHoehe=1350
|
||||
# Dimension=1100x1400
|
||||
+118
-56
@@ -104,6 +104,7 @@ class CadItem(DataModel):
|
||||
# ist also eigentlich kein Teil der gui
|
||||
"truemmer",
|
||||
# Felder der Comboboxen. benannt wie deren callbacks
|
||||
"cb_datenbank_neu",
|
||||
"cb_pdm_kategorie_neu",
|
||||
"cb_halbzeug_neu",
|
||||
"cb_halbzeugoberflaeche",
|
||||
@@ -389,7 +390,7 @@ class CadItem(DataModel):
|
||||
text_neu = None
|
||||
# semikolon müssen rausfliegen
|
||||
if re.search(';', text):
|
||||
text_neu = re.sub(r"\s*;\s*", " /", text, flags=re.I)
|
||||
text_neu = re.sub(r"\s*;\s*", " / ", text, flags=re.I)
|
||||
if author:
|
||||
if text_neu:
|
||||
text_neu = '{aenderungstext} (von {author})'.format(aenderungstext=text_neu, author=author)
|
||||
@@ -477,7 +478,7 @@ class CadItem(DataModel):
|
||||
if "freigabevermerk_sivas" in translated_data:
|
||||
text = translated_data["freigabevermerk_sivas"]
|
||||
if re.search(';', text):
|
||||
translated_data["freigabevermerk_neu"] = re.sub(r"\s*;\s*", " /", text, flags=re.I)
|
||||
translated_data["freigabevermerk_neu"] = re.sub(r"\s*;\s*", " / ", text, flags=re.I)
|
||||
|
||||
# Spezial Hersteller: aus "80312 - Rehau AG & Co." wird "Rehau AG & Co."
|
||||
if "hersteller_sivas" in translated_data:
|
||||
@@ -537,7 +538,7 @@ class CadItem(DataModel):
|
||||
"""lädt die SIVAS csv Datei in die Felder für die Oberfläche """
|
||||
if not os.path.exists(path):
|
||||
return None
|
||||
df = pd.read_csv(path, sep=';', converters={"Version":str})
|
||||
df = pd.read_csv(path, sep=';', converters={"Version":str, "Werkstoff": str})
|
||||
ret = dict()
|
||||
# baue aus der gegebenen Zeile ein dict
|
||||
d = df.to_dict()
|
||||
@@ -650,6 +651,20 @@ class CadItem(DataModel):
|
||||
if not self.get_gui_data(key_sivas):
|
||||
if not self.get_gui_data(key_neu):
|
||||
missing.append(self.key2label[key_neu])
|
||||
|
||||
def get_key_with_data(self, key_sivas: str, key_neu: str, key_list: list = []):
|
||||
''' Vergleicht Inhalt von SIVAS-Feld und überschriebenem Feld:
|
||||
- Sind nur das überschriebene oder das überschriebe und das SIVAS-Feld befüllt, wird das überschriebene zurückgegeben
|
||||
- Ist nur das SIVAS-Feld befüllt, wird das SIVAS-Feld zurückgegeben
|
||||
- Ist keines von beiden Feldern befüllt, wird None zurückgegeben '''
|
||||
|
||||
if not self.get_gui_data(key_neu):
|
||||
if not self.get_gui_data(key_sivas):
|
||||
return
|
||||
key_list.append(key_sivas)
|
||||
else:
|
||||
key_list.append(key_neu)
|
||||
return key_list
|
||||
|
||||
def check_pflichtfelder(self):
|
||||
"""Allgemeine Prüfungen:
|
||||
@@ -754,13 +769,36 @@ class CadItem(DataModel):
|
||||
return (True, {})
|
||||
|
||||
def check_improper_chars(self, invalid_chars):
|
||||
""" überprüft ob inder Oberfläche nicht erlaubte Zeichen eingetragen wurden"""
|
||||
wrongchars = dict()
|
||||
for key in self.key2label:
|
||||
if key == "model3d_neu": # 3D Teil Pfad ausnehmen
|
||||
continue
|
||||
if key == "material_sivas": # Wert in GUI-Spalte "SIVAS-Werte in Feld "Material" nicht berücksichtigen
|
||||
continue
|
||||
"""
|
||||
Überprüft, ob in den Eingabefeldern der GUI unzulässige Zeichen eingetragen wurden.
|
||||
Die unzulässigen Zeichen sind in cfg/InvalidCharacters.txt aufgelistet.
|
||||
Ursprung dieser Liste ist //ruledesigner/RDF_Daten/Konfigurator/CustomVaulting/ERP_Item.ini -> Option "InvalidCharacters"
|
||||
"""
|
||||
wrongchars = {}
|
||||
keys_to_check = []
|
||||
|
||||
# Bei diesen Feldern soll geprüft werden, ob sie einen Inhalt aufweisen. Wenn nicht, muss auch nicht geprüft werden, ob sich darin unzulässige Zeichen befinden.
|
||||
check_key_for_data = ["halbzeugnummer_neu", "halbzeuglaenge_neu", "zusatzinfos_auto_text", "zusatzinfos_bendef_text"]
|
||||
keys_with_data = list(filter(lambda key: self.get_gui_data(key) != "", check_key_for_data))
|
||||
keys_to_check + keys_with_data
|
||||
|
||||
# Mapping SIVAS-Felder und Überschriebene Felder. Hier soll jeweils geprüft werden, welches der beiden einen Wert enthält.
|
||||
# Wenn beide Felder einen Wert enthalten soll nur das überschriebene Feld nach unzulässigen Zeichen durchsucht werden, ansonsten das SIVAS-Feld
|
||||
compare_keys_for_data = { "bezeichnung1_sivas": "bezeichnung1_neu",
|
||||
"tosgruppe_sivas": "tosgruppe_neu",
|
||||
"hersteller_sivas": "hersteller_neu",
|
||||
"ersatzfuer_sivas": "ersatzfuer_neu",
|
||||
"ersetztdurch_sivas": "ersetztdurch_neu",
|
||||
"herstteilenr_sivas": "herstteilenr_neu",
|
||||
"material_sivas": "material_neu",
|
||||
"aenderungsindex_sivas": "aenderungsindex_neu",
|
||||
"aenderungstext_sivas": "aenderungstext_neu",
|
||||
"freigabevermerk_sivas": "freigabevermerk_neu",
|
||||
}
|
||||
for sivas_key, neu_key in compare_keys_for_data.items():
|
||||
self.get_key_with_data(sivas_key, neu_key, keys_to_check)
|
||||
|
||||
for key in keys_to_check:
|
||||
content = self.get_gui_data(key)
|
||||
for c in invalid_chars:
|
||||
if c in content:
|
||||
@@ -787,18 +825,14 @@ class CadItem(DataModel):
|
||||
def check_content(self):
|
||||
"""Überprüfe die Inhalte nach Längen, Zeichenketten und korrekten Kombinationen der Eingaben"""
|
||||
|
||||
# Prüfung Bezeichnungslänge (darf max. 50 Zeichen betragen)
|
||||
pdm_kategorie_neu = self.get_gui_data("pdm_kategorie_neu")
|
||||
content = self.get_content('bezeichnung1_sivas', 'bezeichnung1_neu')
|
||||
if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe":
|
||||
if len(content) > 45:
|
||||
self.message_error('Bezeichnung1 zu gross', 'bezeichnung_zu_gross_45')
|
||||
return False
|
||||
else:
|
||||
if len(content) > 50:
|
||||
self.message_error('Bezeichnung1 zu gross', 'bezeichnung_zu_gross_50')
|
||||
return False
|
||||
if len(content) > 50:
|
||||
self.message_error('Bezeichnung1 zu gross', 'bezeichnung_zu_gross_50')
|
||||
return False
|
||||
|
||||
# Rüstcode und Sögeliste
|
||||
# Rüstcode und Sägeliste
|
||||
ruestcode = self.get_gui_data("ruestcode_sivas")
|
||||
halbzeugOhneSaege_neu = self.get_gui_data("halbzeugOhneSaege_neu")
|
||||
if ruestcode == "SRC Standard Rüstcode" and halbzeugOhneSaege_neu == "Sägeliste nicht benötigt":
|
||||
@@ -1135,9 +1169,6 @@ class CadItem(DataModel):
|
||||
bezeichnung1 = self.get_content('bezeichnung1_sivas', 'bezeichnung1_neu')
|
||||
title = bezeichnung1
|
||||
data["KategorieNE"] = pdm_kategorie_neu
|
||||
# Bezeichnung um "- BG" ergänzen
|
||||
if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe":
|
||||
title = bezeichnung1 + " - BG"
|
||||
data["Title"] = title
|
||||
|
||||
# Aus Halbzeug
|
||||
@@ -1181,7 +1212,7 @@ class CadItem(DataModel):
|
||||
|
||||
bezeichnung4 = ""
|
||||
if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe":
|
||||
bezeichnung4 = " - BG"
|
||||
bezeichnung4 = "- BG"
|
||||
data["Bezeichnung4"] = bezeichnung4
|
||||
|
||||
# Author
|
||||
@@ -1474,7 +1505,9 @@ class GuiLogic():
|
||||
"""gibt ein dict zurück, welches neu im Modell gesetzt wird"""
|
||||
|
||||
ret = dict()
|
||||
if key == 'cb_pdm_kategorie_neu':
|
||||
if key == 'cb_datenbank_neu':
|
||||
ret = self.cb_datenbank_neu(value)
|
||||
elif key == 'cb_pdm_kategorie_neu':
|
||||
ret = self.cb_pdm_kategorie_neu(value)
|
||||
elif key == 'cb_neuaufbau':
|
||||
ret = self.cb_neuaufbau(value)
|
||||
@@ -1542,7 +1575,9 @@ class GuiLogic():
|
||||
wegen der Abhängigkeiten der Comboboxen anschliessend folgen sollen
|
||||
"""
|
||||
ret = list()
|
||||
if key == 'cb_pdm_kategorie_neu':
|
||||
if key == 'cb_datenbank_neu':
|
||||
ret = []
|
||||
elif key == 'cb_pdm_kategorie_neu':
|
||||
ret = ['cb_neuaufbau', 'cb_aus_halbzeug_neu', 'cb_3Dmodel_neu', 'cb_halbzeugOhneSaege_neu', 'cb_ruestcode_neu',
|
||||
'cb_fertigungsart_neu', 'cb_allgemeintoleranz_neu', 'cb_fosGruppe_neu', 'cb_kalkulationsart_neu', 'cb_beschaffungsart_neu',
|
||||
'cb_mengeneinheit_neu', 'cb_halbzeug_neu', 'cb_dispogruppe_neu', 'cb_dispolaufgruppe_neu', 'cb_hersteller_neu', 'cb_werkstoffdiskrepanz',
|
||||
@@ -1616,6 +1651,14 @@ class GuiLogic():
|
||||
raise Exception("this callback does not exist "+key)
|
||||
return ret
|
||||
|
||||
def cb_datenbank_neu(self, selected):
|
||||
ret = dict()
|
||||
if selected is None:
|
||||
ret['datenbank'] = "Produktiv" # Default
|
||||
else:
|
||||
ret['datenbank'] = selected
|
||||
return ret
|
||||
|
||||
def cb_pdm_kategorie_neu(self, selected):
|
||||
"""setzt die Dropdownliste mit
|
||||
<undefiniert>, Baugruppe, Einzelteil, Kaufteil, Schweissbaugruppe
|
||||
@@ -2522,6 +2565,7 @@ class GuiLogic():
|
||||
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
|
||||
version_sivas = str(self._model.get_gui_data("version_sivas"))
|
||||
freigabe_sivas = self._model.get_gui_data("freigabevermerk_sivas")
|
||||
freigabe_neu = self._model.get_gui_data("freigabevermerk_neu") # Brauchen wir für den Fall, dass der SIVAS-Freigabevermerk beim Einlesen bereits transformiert wurden, da er ein Semikolon enthielt.
|
||||
|
||||
if selected is None:
|
||||
# Default Vorbelegung
|
||||
@@ -2534,59 +2578,77 @@ class GuiLogic():
|
||||
default = 'Anpassung an neues Indexsystem, Zeichnung mit Versionsnummer {version} weiterhin gültig'.format(version=version_sivas)
|
||||
else:
|
||||
default = '-'
|
||||
else:
|
||||
if freigabe_neu is not None:
|
||||
default = freigabe_neu
|
||||
ret['freigabevermerk_neu'] = default
|
||||
else:
|
||||
ret['freigabevermerk_neu'] = selected
|
||||
return ret
|
||||
|
||||
def cb_zusatzinfos_auto_text(self, selected):
|
||||
ret = dict()
|
||||
|
||||
ret = dict()
|
||||
aenderungsindex_sivas = self._model.get_gui_data("aenderungsindex_sivas")
|
||||
truemmer = self._model.get_gui_data("truemmer")
|
||||
ruestcode = self._model.get_gui_data("ruestcode_sivas")
|
||||
teilenummer = str(self._model.get_gui_data("teilenummer"))
|
||||
werkstoffdiskr_neu = self._model.get_gui_data("werkstoffdiskr_neu")
|
||||
aus_halbzeug_neu = self._model.get_gui_data("aus_halbzeug_neu")
|
||||
aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu")
|
||||
active_id = self._model.get_current_item_id()
|
||||
children_of_active_id = self._model.get_all_children_of_id(active_id)
|
||||
|
||||
# Ermittlung, ob sich in der Stückliste der ausgewählten Teilenummer Beistellungsteile oder nicht-dispoaktive Teile befinden
|
||||
beistellungen = False
|
||||
dispoinaktiv = False
|
||||
if children_of_active_id is not None:
|
||||
all_beistellungen = self._model.get_bom_properties("Lieferantenbeistellung")
|
||||
all_dispoaktiv = self._model.get_bom_properties("Dispoaktiv")
|
||||
active_id = self._model.get_current_item_id()
|
||||
children_of_active_id = self._model.get_all_children_of_id(active_id)
|
||||
|
||||
for child in children_of_active_id:
|
||||
if all_beistellungen[child] == "True":
|
||||
beistellungen = True
|
||||
if all_dispoaktiv[child] == "False":
|
||||
dispoinaktiv = True
|
||||
|
||||
# Liest Optionsnamen aus 'Zusatzinformationen.cfg'
|
||||
cfg_single_options = dict.fromkeys(self._config.Zusatz.get_section_options("EinzelTextblöcke"), "EinzelTextblöcke")
|
||||
cfg_combo_options = dict.fromkeys(self._config.Zusatz.get_section_options("ComboTextblöcke"), "ComboTextblöcke")
|
||||
all_cfg_options = cfg_single_options | cfg_combo_options
|
||||
|
||||
if selected is None:
|
||||
text = ''
|
||||
try:
|
||||
blacklist = self._config.get_blacklist()
|
||||
self._config.get_blacklist()
|
||||
except:
|
||||
self._model.message_error('Blacklist nicht vorhanden', 'blacklist_not_exist')
|
||||
return {}
|
||||
|
||||
|
||||
# Prüft, ob einer der nachfolgenden Fälle auf die Teilenummer zutrifft, die im Moment migriert wird
|
||||
matches = []
|
||||
if aenderungsindex_sivas and aenderungsindex_sivas.islower():
|
||||
if truemmer == 'J' or ruestcode is None:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeTruemmer')
|
||||
if teilenummer in blacklist:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeTruemmerBlacklist')
|
||||
elif teilenummer in blacklist:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeBlacklist')
|
||||
elif werkstoffdiskr_neu == True:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeWerkstoffdiskrepanz')
|
||||
matches.append("Kleinbuchstabe")
|
||||
if truemmer == 'J' or ruestcode is None:
|
||||
matches.append("Truemmer")
|
||||
if werkstoffdiskr_neu:
|
||||
matches.append("Werkstoffdiskrepanz")
|
||||
if dispoinaktiv:
|
||||
matches.append("Dispoinaktiv")
|
||||
if beistellungen:
|
||||
if aus_halbzeug:
|
||||
matches.append("BlacklistHZ")
|
||||
else:
|
||||
text = self._config.Zusatz.get('EinzelTextblöcke', 'Kleinbuchstabe')
|
||||
text = text.format(aenderungsindex=aenderungsindex_sivas)
|
||||
elif truemmer == 'J' or ruestcode is None:
|
||||
if teilenummer in blacklist:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerBlacklist')
|
||||
elif werkstoffdiskr_neu == True:
|
||||
text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerWerkstoffdiskrepanz')
|
||||
else:
|
||||
text = self._config.Zusatz.get('EinzelTextblöcke', 'Truemmer')
|
||||
elif teilenummer in blacklist:
|
||||
if aus_halbzeug_neu:
|
||||
text = self._config.Zusatz.get('EinzelTextblöcke', 'BlacklistHZ')
|
||||
else:
|
||||
text = self._config.Zusatz.get('EinzelTextblöcke', 'BlacklistBG')
|
||||
elif werkstoffdiskr_neu == True:
|
||||
text = self._config.Zusatz.get('EinzelTextblöcke', 'Werkstoffdiskrepanz')
|
||||
else:
|
||||
pass
|
||||
matches.append("BlacklistBG")
|
||||
|
||||
# Sucht sich die zutreffende Option aus der "Zusatzinformationen.cfg", die mit den gefundenen Fällen übereinstimmen
|
||||
# heraus und gibt den Optionstext zurück. Bei fehlender Übereinstimmung wird kein Text geschrieben
|
||||
if len(matches) > 0:
|
||||
match_len = len("".join(matches))
|
||||
for option in all_cfg_options:
|
||||
if all(match in option for match in matches) and len(option) == match_len:
|
||||
text = self._config.Zusatz.get(all_cfg_options[option], option)
|
||||
break
|
||||
|
||||
ret['zusatzinfos_auto_text'] = text
|
||||
else:
|
||||
|
||||
+14
-10
@@ -41,11 +41,11 @@ messages = {
|
||||
"export_not_sucessful":'Export der Migrationsdatei fehlgeschlagen. Überprüfe Schreibrechte für {path}.',
|
||||
"export_not_sucessful_file_open":'Export fehlgeschlagen. Datei offen?',
|
||||
"blacklist_not_exist": 'Bitte Blacklist vom Server holen',
|
||||
"wrong_impftool_path": 'Pfad zur DataPrepUtility.exe nicht gefunden. Bitte setenv.bat prüfen.' ,
|
||||
"wrong_impftool_path": 'Pfad zur DataPrepUtility.exe nicht gefunden. Bitte Pfad unter ...\\bin\\cremig_setenv.bat prüfen.',
|
||||
"too_many_logfiles":'Keine eindeutige Logdatei zum aktuellen DataPrep Prozess gefunden. Bitte löschen Sie die überflüssigen .log files',
|
||||
"some_error_in_log":'Log Datei enthält einen Fehler. Bitte prüfen.',
|
||||
"preparation_sucessful":'Preparation mit der Datei {path} erfolgreich',
|
||||
"missing_in_blacklist":"{teilenummer} fehlt in der Blacklist, da sich in dessen Stückliste beigestellte oder dispo-inaktive Positionen befinden.\n\nBitte {teilenummer} in die Blacklist aufnehmen!",
|
||||
"missing_in_blacklist":"{teilenummer} fehlt in der Blacklist, da sich in dessen Stückliste beigestellte oder dispo-inaktive Positionen befinden.\n\nBitte {teilenummer} in die Blacklist aufnehmen! \n\nDiese befindet sich in folgender Datei:\n//ruledesigner\\RDF_Daten\\Konfigurator\\CustomVaulting\\ERP_BOM.ini\n\nDanach dieses Programm erneut starten um die aktualisierte Blacklist zu laden",
|
||||
"halbzeug_not_in_RDids":"Halbzeug-Teilenummer '{halbzeug_id}' fehlt in '{rdids_path}'.\n\nEntweder wurde das Halbzeug noch nicht migriert, oder der aktuelle Stand von RD_Teilenummern.csv muss geladen werden.\n\nZum Laden des aktuellen Standes von RD_Teilenummern.csv auf 'Suche' unter dem Eingabefeld der Baugruppennummer klicken und dieses Programm neu starten"
|
||||
}
|
||||
|
||||
@@ -121,9 +121,10 @@ class Controller(Observer):
|
||||
data_dir = self.get_env("data")
|
||||
rd_dbase_filename = self.get_env("rd_dbase_filename")
|
||||
|
||||
excluded_bom_ids = self._config.bom_config.get_excluded_ids("ExcludedPartnumbersInBOM")
|
||||
excluded_bom_ids = self._config.bom_config.get_excluded_ids("ExcludedPartnumbersInBOM") # Artikelnummern wie z.B. "MA0000006" sollen nicht im Baum dargestellt werden
|
||||
|
||||
sivas_bom = SivasBOM(asm_id, data_dir, asm_id + '.json', load_local_bom, excluded_bom_ids)
|
||||
|
||||
sivas_bom.extend_asm_bom(asm_id, {"Parent": None, "Position": "10/0"}) # Ergänzt Stücklistendaten um eine fiktive Baugruppe "None", in der die Haupt-Teilenummer als Pos. 1 vorliegt. Dadurch können auch Teilenummern ohne Stückliste korrekt abgebildet werden
|
||||
|
||||
rd_data = RuleDesignerDatabaseConfig(data_dir, rd_dbase_filename, load_local_rd_ids)
|
||||
@@ -184,8 +185,8 @@ class Controller(Observer):
|
||||
# falls eine .json Datei davon im Work Ordner existiert, dann diese zuerst versuchen ins Modell zu laden
|
||||
self._view.clear_rightframes()
|
||||
self._model.clear()
|
||||
isok = self._model.from_json_file(self.get_env("out"), cid)
|
||||
if isok == False:
|
||||
saved_json_exists = self._model.from_json_file(self.get_env("out"), cid)
|
||||
if saved_json_exists == False:
|
||||
# ansonsten die .csv Datei mit den SIVAS Infos aus data holen
|
||||
loaded = self._model.sivas_data_from_csv(cid)
|
||||
if loaded == None:
|
||||
@@ -283,15 +284,17 @@ class Controller(Observer):
|
||||
elif key == 'cb_zurücksetzen':
|
||||
self.zuruecksetzen()
|
||||
elif key == 'cb_suche_asm':
|
||||
# kopiere Blacklist von Server
|
||||
# hole dir die in die GUI eingetragene Nummer
|
||||
update_database.get_blacklist(self.get_env("data"))
|
||||
# hole dir den in die gui eingetragene Nummer
|
||||
current_asmid = self.data_from_view('asm_id')
|
||||
self.set_current_asm_id(current_asmid)
|
||||
if current_asmid != '':
|
||||
self.set_current_asm_id(current_asmid)
|
||||
elif key == 'cb_ladelokal_asm':
|
||||
# hole dir nur die lokalen Daten. Keine Datenbankabfrage außer Blacklist
|
||||
update_database.get_blacklist(self.get_env("data"))
|
||||
current_asmid = self.data_from_view('asm_id')
|
||||
# hole dir nur die lokalen Daten. Keine Datenbankabfrage
|
||||
self.set_current_asm_id(current_asmid, load_local_bom=True, load_local_teilestamm=True, load_local_rd_ids=True)
|
||||
if current_asmid != '':
|
||||
self.set_current_asm_id(current_asmid, load_local_bom=True, load_local_teilestamm=True, load_local_rd_ids=True)
|
||||
elif key == 'cb_3dsuchen':
|
||||
self.suche_3d()
|
||||
|
||||
@@ -318,6 +321,7 @@ class Controller(Observer):
|
||||
return
|
||||
|
||||
# Pruefung ob assembly-id in Blacklist fehlt
|
||||
update_database.get_blacklist(self.get_env("data"))
|
||||
(ok, missing_blacklist_id) = self._model.check_blacklist_completeness()
|
||||
if ok == False:
|
||||
id = ''.join(missing_blacklist_id)
|
||||
|
||||
+11
-6
@@ -302,11 +302,18 @@ class RightFramePDM(AllFrames):
|
||||
self.datenbank_label = ttk.Label(frame, text="Datenbank:", foreground='blue' )
|
||||
self.datenbank_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.datenbank = tk.StringVar()
|
||||
self.datenbank.set("Schulung") # default
|
||||
self.datenbank_prod = ttk.Radiobutton(frame, text="Produktiv", variable=self.datenbank, value="Produktiv")
|
||||
self.datenbank_prod = ttk.Radiobutton(frame,
|
||||
text="Produktiv",
|
||||
variable=self.datenbank,
|
||||
value="Produktiv",
|
||||
command=lambda: self.callback('cb_datenbank_neu', self.datenbank.get()))
|
||||
self.datenbank_prod .grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
self.datenbank_schul = ttk.Radiobutton(frame, text="Schulung", variable=self.datenbank, value="Schulung")
|
||||
self.datenbank_schul = ttk.Radiobutton(frame,
|
||||
text="Schulung",
|
||||
variable=self.datenbank,
|
||||
value="Schulung",
|
||||
command=lambda: self.callback('cb_datenbank_neu', self.datenbank.get()))
|
||||
self.datenbank_schul .grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3)
|
||||
self.rownum += 1
|
||||
|
||||
@@ -595,10 +602,8 @@ class RightFrameBezeichnung(AllFrames):
|
||||
def trace_bezeichnung_neu(self, var, index, mode):
|
||||
""" Spezial: Bei zu langem Eintrag die Farbe des Textes auffällig machen """
|
||||
text = self.bezeichnung1_neu.get()
|
||||
if len(text) < 45:
|
||||
if len(text) < 51:
|
||||
self.bezeichnung1_neu_entry.configure(foreground='black')
|
||||
elif len(text) < 51:
|
||||
self.bezeichnung1_neu_entry.configure(foreground='orange')
|
||||
else:
|
||||
self.bezeichnung1_neu_entry.configure(foreground='red')
|
||||
|
||||
|
||||
@@ -806,7 +806,6 @@ class Configs:
|
||||
self.Materialien = MaterialTransConfig(cfg_dir)
|
||||
self.bom_config = BOMConfig(cfg_dir)
|
||||
self._teilenummern = None
|
||||
self._blacklist = None
|
||||
|
||||
def get_cfg_path(self):
|
||||
return self._cfg_dir
|
||||
@@ -826,8 +825,7 @@ class Configs:
|
||||
def get_blacklist(self):
|
||||
if not self._data_dir:
|
||||
raise Exception("set_data_dir not called. path not set")
|
||||
if not self._blacklist:
|
||||
with open(os.path.join(self._data_dir, 'blacklist.txt')) as f:
|
||||
lines = f.read().splitlines()
|
||||
self._blacklist = lines
|
||||
with open(os.path.join(self._data_dir, 'blacklist.txt')) as f:
|
||||
lines = f.read().splitlines()
|
||||
self._blacklist = lines
|
||||
return self._blacklist
|
||||
|
||||
@@ -162,5 +162,5 @@ if __name__ == '__main__':
|
||||
if args.teilestamm:
|
||||
get_sivas_teilestamm(args.sivasid, args.out_dir, overwrite = True)
|
||||
|
||||
if args.stueckliste:
|
||||
if args.bom:
|
||||
get_sivas_bom(args.sivasid, args.out_dir)
|
||||
Reference in New Issue
Block a user