Default methoden für alle callbackroutinen rein. Umbau des Aufrufs der gui, um auch assemblies laden zu könenn

This commit is contained in:
2024-02-20 12:51:38 +01:00
parent 74df118118
commit 5e65dc2b36
5 changed files with 236 additions and 46 deletions
+1
View File
@@ -443,6 +443,7 @@ Der Wert aus der Spalte "HzOhneSaegeliste" in "from_siv.csv" muss in gemappter /
**Nachfolgende Logik definiert:**
- state der ComboBox je nach Situation (readonly / disabled)
- Dropdownwerte (Quelle, wo die Dropdownwerte zu finden sind, bzw. direkt die Werte)
-
IF PDM-Kategorie == "Baugruppe":
Dropdownwerte = None (keine Werte)
+7 -22
View File
@@ -4,11 +4,10 @@ import tkinter as tk
from gui import App
from caditem import CadItem, GuiLogic
from controller import Controller
from manage_configs import Configs, SivasAssemblyData
from manage_configs import Configs
import argparse
import os
import json
from get_teilestamm import FetchSivasTeilestamm
demo_data = """
@@ -81,13 +80,14 @@ class Environment:
self.cfg_dir = os.environ.get('CREMIG_CFG')
self.ruledesigner_csv_filename = os.environ.get('RD_DATABASE_NAME')
def build_gui(model, configs):
def build_gui(model, configs, sivasid, uselocal=True):
root = tk.Tk()
#root = ttk.Window()
app = App(root)
controller = Controller(model, app)
controller.set_env(configs.get_env())
controller.get_csv_files_of_asm(sivasid, uselocal)
logic = GuiLogic(model, configs)
model.add_logic(logic)
@@ -125,29 +125,14 @@ if __name__ == '__main__':
elif args.sivasid:
sivasid = args.sivasid.strip()
filename = sivasid + '.json'
assembl_path = os.path.join(output_dir, filename)
assembl_path = os.path.join(output_dir, sivasid + '.json')
if os.path.exists(assembl_path):
# wenn schon einmal das assembly als json abgespeichert wurde, dann dieses laden
model.load(demo_data)
model.load(assembl_path)
else:
# ansonsten sich die Einzelteile als .csv und den Aufbau des Assemblies als .json holen
sivas_teilestamm = FetchSivasTeilestamm(sivasid, data_dir)
sivas_teilestamm.fetch_from_db(args.uselocal)
if not args.uselocal:
sivas_teilestamm.get_unmigrated_teilstamm_csvs()
redids = sivas_teilestamm.get_red_ids()
sad = SivasAssemblyData(data_dir, filename)
parent_children = sad.get_parent_children()
model.set_red_ids(redids)
model.set_parent_children(parent_children)
model.set_asm_id(sivasid)
# dann die Gui damit aufbauen
build_gui(model, configs)
# die Gui aufbauen
build_gui(model, configs, sivasid, args.uselocal)
else:
parser.print_help()
+189 -19
View File
@@ -55,6 +55,7 @@ class CadItem(DataModel):
"Freigabevermerk", "ZusaetzlicheInformationen"]
gui_data_keys = [
# Felder der Oberfläche um etwas einzugeben
"asm_id",
"teilenummer",
"datenbank",
@@ -96,6 +97,9 @@ class CadItem(DataModel):
"freigabevermerk_sivas", "freigabevermerk_neu",
"zusatzinfos_auto_text",
"zusatzinfos_bendef_text",
# das wird nur zur Datenübergabe aus der csv verwendet,
# ist also eigentlich kein Teil der gui
"truemmer",
# Felder der Comboboxen. benannt wie deren callbacks
"cb_pdm_kategorie_neu",
"cb_halbzeug_neu",
@@ -146,7 +150,7 @@ class CadItem(DataModel):
"HalbzeugExtern":"halbzeug_sivas",
"Werkstoff":"werkstofftyp_sivas",
"Oberfläche":"cb_oberflaeche_neu",
# "Truemmer":"truemmer",
"Truemmer":"truemmer",
"HzOhneSaegeliste":"halbzeugOhneSaege_sivas",
"Ruestcode":"ruestcode_sivas",
"Fertigungsart":"fertigungsart_sivas",
@@ -180,6 +184,8 @@ class CadItem(DataModel):
def get_asm_id(self):
return self.get_gui_data("asm_id")
def set_current_item_id(self, tid):
self.set_gui_data('teilenummer', tid)
def get_current_item_id(self):
return self.get_gui_data('teilenummer')
@@ -465,36 +471,36 @@ class GuiLogic():
elif key == 'cb_halbzeugOhneSaege_neu':
ret = self.cb_halbzeugOhneSaege_neu(value)
elif key == 'cb_ruestcode_neu':
pass
ret = self.cb_ruestcode_neu(value)
###
elif key == 'cb_fertigungsart_neu':
pass
ret = self.cb_fertigungsart_neu(value)
elif key == 'cb_allgemeintoleranz_neu':
pass
ret = self.cb_allgemeintoleranz_neu(value)
elif key == 'cb_fosGruppe_neu':
pass
ret = self.cb_fosGruppe_neu(value)
elif key == 'cb_kalkulationsart_neu':
pass
ret = self.cb_kalkulationsart_neu(value)
elif key == 'cb_beschaffungsart_neu':
pass
ret = self.cb_beschaffungsart_neu(value)
elif key == 'cb_mengeneinheit_neu':
pass
ret = self.cb_mengeneinheit_neu(value)
elif key == 'cb_halbzeug_neu':
pass
ret = self.cb_halbzeug_neu(value)
elif key == 'cb_dispogruppe_neu':
pass
ret = self.cb_dispogruppe_neu(value)
elif key == 'cb_dispolaufgruppe_neu':
pass
ret = self.cb_dispolaufgruppe_neu(value)
elif key == 'cb_hersteller_neu':
pass
ret = self.cb_hersteller_neu(value)
elif key == 'cb_werkstoffdiskrepanz':
pass
ret = self.cb_werkstoffdiskrepanz(value)
elif key == 'cb_werkstofftyp_neu':
pass
# ret = self.cb_werkstofftyp_neu(value)
ret = self.cb_werkstofftyp_neu(value)
elif key == 'cb_material_neu':
pass
ret = self.cb_material_neu(value)
elif key == 'cb_oberflaeche_neu':
pass
ret = self.cb_oberflaeche_neu(value)
elif key == 'cb_farbe_neu':
ret = self.cb_farbe_neu(value)
else:
@@ -584,9 +590,9 @@ class GuiLogic():
# Entry-Abhängigkeit der Bezeichnung 1. keine eigene Callback. Abhängig von der Kategorie
pdm_kat = ret["pdm_kategorie_neu"]
if pdm_kat == "Baugruppe" or pdm_kat == "Schweissbaugruppe":
maxlen = 5 # Längenbeschränkung = 45 Zeichen
maxlen = 45 # Längenbeschränkung = 45 Zeichen
else:
maxlen = 10 # Längenbeschränkung = 50 Zeichen
maxlen = 50 # Längenbeschränkung = 50 Zeichen
text = self._model.get_gui_data("bezeichnung1_sivas")
if len(text) > maxlen:
ret["bezeichnung1_neu"] = text[0:maxlen]
@@ -765,6 +771,147 @@ class GuiLogic():
pass
return ret
def cb_ruestcode_neu(self, selected):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_ruestcode_neu'] = ''
ret['ruestcode_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
lrstcodes = self._config.Allgemein.get_options("RuestcodeBaugruppe")
else:
lrstcodes = self._config.Allgemein.get_options("RuestcodeStandard")
if selected is None:
ret['ruestcode_neu'] = lrstcodes[0]
ret['cb_ruestcode_neu'] = lrstcodes
else:
ret['ruestcode_neu'] = selected
# self._controller.message_info('Rüstcodeinformationen', 'rüstcode_infos')
return ret
def cb_fertigungsart_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_halbzeugOhneSaege_neu'] = ''
ret['fertigungsart_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_allgemeintoleranz_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_allgemeintoleranz_neu'] = ''
ret['allgemeintoleranz_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_fosGruppe_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_fosGruppe_neu'] = ''
ret['fosGruppe_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_kalkulationsart_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_kalkulationsart_neu'] = ''
ret['kalkulationsart_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_beschaffungsart_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_beschaffungsart_neu'] = ''
ret['beschaffungsart_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_mengeneinheit_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_mengeneinheit_neu'] = ''
ret['mengeneinheit_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_halbzeug_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_halbzeug_neu'] = ''
ret['halbzeug_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_dispogruppe_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_dispogruppe_neu'] = ''
ret['dispogruppe_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_dispolaufgruppe_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_dispolaufgruppe_neu'] = ''
ret['dispolaufgruppe_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_hersteller_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_hersteller_neu'] = ''
ret['hersteller_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_werkstoffdiskrepanz(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_werkstoffdiskrepanz'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
# def cb_werkstofftyp_neu(self, selected_werkstoff):
# """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche"""
@@ -802,6 +949,29 @@ class GuiLogic():
# }
# return ret
def cb_material_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_material_neu'] = ''
ret['material_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
def cb_oberflaeche_neu(self, value):
ret = dict()
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
ret['cb_oberflaeche_neu'] = ''
ret['oberflaeche_neu'] = ''
if pdm_kategorie_neu == "Baugruppe":
pass
else:
pass
return ret
# def oberfläche(self, selected):
# ret = dict()
+37 -4
View File
@@ -1,4 +1,8 @@
import os
from manage_configs import SivasAssemblyData
from get_teilestamm import FetchSivasTeilestamm
"""
Contains the logic for the MVC of CreoMigrate Gui
"""
@@ -76,6 +80,24 @@ class Controller(Observer):
raise Exception("this path is not defined "+env_path)
return ret
def get_csv_files_of_asm(self, asmid, uselocal):
""" sich die Einzelteile als .csv und den Aufbau des Assemblies als .json holen """
sivas_teilestamm = FetchSivasTeilestamm(asmid, self.get_env("data"))
# falls uselocal True, dann keine Serverabfrage, sondern mit den lokalen Daten arbeiten
sivas_teilestamm.fetch_from_db(uselocal)
if not uselocal:
sivas_teilestamm.get_unmigrated_teilstamm_csvs()
redids = sivas_teilestamm.get_red_ids()
sad = SivasAssemblyData(self.get_env("data"), asmid + '.json')
parent_children = sad.get_parent_children()
self._model.set_red_ids(redids)
self._model.set_parent_children(parent_children)
self._model.set_asm_id(asmid)
def set_model(self, model):
self._model = model
self.attach(model)
@@ -89,9 +111,9 @@ class Controller(Observer):
self._view.data_from_model()
def get_current_asm_id(self):
self._model.get_current_asm_id()
self._model.get_asm_id()
def set_current_asm_id(self, asm_id):
self._model.set_current_asm_id(asm_id)
self._model.set_asm_id(asm_id)
def set_current_item_id(self, cid):
@@ -103,10 +125,14 @@ class Controller(Observer):
red_ids = self._model.get_red_ids()
if not cid in red_ids:
return
# TODO save current given data. In case, ask whether you should save or drop
self.set_gui_data('teilenummer', cid)
self._model.set_current_item_id(cid)
self._load_cid_data2model(cid)
def _load_cid_data2model(self, cid):
"""lädt alle nötigen Daten für diese ID """
# falls eine .json Datei davon im Work Ordner existiert, dann diese zuerst versuchen ins Modell zu laden
isok = self._model.from_json_file(self.get_env("out"), cid)
if isok == False:
@@ -162,6 +188,12 @@ class Controller(Observer):
#self._view.set_widget_status(widgetname, status)
pass
def message_info(self, title, key, questions='ok'):
return tkinter.messageBox.showinfo(title, message[key])
def message_error(self, title, key, type='error'):
pass
def callback(self, key, value):
if not self._model:
raise Exception("no model yet added")
@@ -174,6 +206,7 @@ class Controller(Observer):
elif key == 'cb_zurücksetzen':
pass
elif key == 'cb_suche_asm':
#self._model.save_to_file()
pass
elif key == 'cb_3dsuchen':
self.suche_3d()
+2 -1
View File
@@ -459,7 +459,8 @@ class Configs:
def set_data_dir(self, data_dir):
self._data_dir = data_dir
self.TeileNummern = RuleDesignerDatabaseConfig(data_dir)
def get_data_dir(self, data_dir):
return self._data_dir
def set_env(self, env):
self._env = env