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:** **Nachfolgende Logik definiert:**
- state der ComboBox je nach Situation (readonly / disabled) - state der ComboBox je nach Situation (readonly / disabled)
- Dropdownwerte (Quelle, wo die Dropdownwerte zu finden sind, bzw. direkt die Werte) - Dropdownwerte (Quelle, wo die Dropdownwerte zu finden sind, bzw. direkt die Werte)
-
IF PDM-Kategorie == "Baugruppe": IF PDM-Kategorie == "Baugruppe":
Dropdownwerte = None (keine Werte) Dropdownwerte = None (keine Werte)
+7 -22
View File
@@ -4,11 +4,10 @@ import tkinter as tk
from gui import App from gui import App
from caditem import CadItem, GuiLogic from caditem import CadItem, GuiLogic
from controller import Controller from controller import Controller
from manage_configs import Configs, SivasAssemblyData from manage_configs import Configs
import argparse import argparse
import os import os
import json import json
from get_teilestamm import FetchSivasTeilestamm
demo_data = """ demo_data = """
@@ -81,13 +80,14 @@ class Environment:
self.cfg_dir = os.environ.get('CREMIG_CFG') self.cfg_dir = os.environ.get('CREMIG_CFG')
self.ruledesigner_csv_filename = os.environ.get('RD_DATABASE_NAME') 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 = tk.Tk()
#root = ttk.Window() #root = ttk.Window()
app = App(root) app = App(root)
controller = Controller(model, app) controller = Controller(model, app)
controller.set_env(configs.get_env()) controller.set_env(configs.get_env())
controller.get_csv_files_of_asm(sivasid, uselocal)
logic = GuiLogic(model, configs) logic = GuiLogic(model, configs)
model.add_logic(logic) model.add_logic(logic)
@@ -125,29 +125,14 @@ if __name__ == '__main__':
elif args.sivasid: elif args.sivasid:
sivasid = args.sivasid.strip() 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): if os.path.exists(assembl_path):
# wenn schon einmal das assembly als json abgespeichert wurde, dann dieses laden # wenn schon einmal das assembly als json abgespeichert wurde, dann dieses laden
model.load(demo_data) model.load(assembl_path)
else: else:
# ansonsten sich die Einzelteile als .csv und den Aufbau des Assemblies als .json holen # die Gui aufbauen
sivas_teilestamm = FetchSivasTeilestamm(sivasid, data_dir) build_gui(model, configs, sivasid, args.uselocal)
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)
else: else:
parser.print_help() parser.print_help()
+189 -19
View File
@@ -55,6 +55,7 @@ class CadItem(DataModel):
"Freigabevermerk", "ZusaetzlicheInformationen"] "Freigabevermerk", "ZusaetzlicheInformationen"]
gui_data_keys = [ gui_data_keys = [
# Felder der Oberfläche um etwas einzugeben
"asm_id", "asm_id",
"teilenummer", "teilenummer",
"datenbank", "datenbank",
@@ -96,6 +97,9 @@ class CadItem(DataModel):
"freigabevermerk_sivas", "freigabevermerk_neu", "freigabevermerk_sivas", "freigabevermerk_neu",
"zusatzinfos_auto_text", "zusatzinfos_auto_text",
"zusatzinfos_bendef_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 # Felder der Comboboxen. benannt wie deren callbacks
"cb_pdm_kategorie_neu", "cb_pdm_kategorie_neu",
"cb_halbzeug_neu", "cb_halbzeug_neu",
@@ -146,7 +150,7 @@ class CadItem(DataModel):
"HalbzeugExtern":"halbzeug_sivas", "HalbzeugExtern":"halbzeug_sivas",
"Werkstoff":"werkstofftyp_sivas", "Werkstoff":"werkstofftyp_sivas",
"Oberfläche":"cb_oberflaeche_neu", "Oberfläche":"cb_oberflaeche_neu",
# "Truemmer":"truemmer", "Truemmer":"truemmer",
"HzOhneSaegeliste":"halbzeugOhneSaege_sivas", "HzOhneSaegeliste":"halbzeugOhneSaege_sivas",
"Ruestcode":"ruestcode_sivas", "Ruestcode":"ruestcode_sivas",
"Fertigungsart":"fertigungsart_sivas", "Fertigungsart":"fertigungsart_sivas",
@@ -180,6 +184,8 @@ class CadItem(DataModel):
def get_asm_id(self): def get_asm_id(self):
return self.get_gui_data("asm_id") 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): def get_current_item_id(self):
return self.get_gui_data('teilenummer') return self.get_gui_data('teilenummer')
@@ -465,36 +471,36 @@ class GuiLogic():
elif key == 'cb_halbzeugOhneSaege_neu': elif key == 'cb_halbzeugOhneSaege_neu':
ret = self.cb_halbzeugOhneSaege_neu(value) ret = self.cb_halbzeugOhneSaege_neu(value)
elif key == 'cb_ruestcode_neu': elif key == 'cb_ruestcode_neu':
pass ret = self.cb_ruestcode_neu(value)
###
elif key == 'cb_fertigungsart_neu': elif key == 'cb_fertigungsart_neu':
pass ret = self.cb_fertigungsart_neu(value)
elif key == 'cb_allgemeintoleranz_neu': elif key == 'cb_allgemeintoleranz_neu':
pass ret = self.cb_allgemeintoleranz_neu(value)
elif key == 'cb_fosGruppe_neu': elif key == 'cb_fosGruppe_neu':
pass ret = self.cb_fosGruppe_neu(value)
elif key == 'cb_kalkulationsart_neu': elif key == 'cb_kalkulationsart_neu':
pass ret = self.cb_kalkulationsart_neu(value)
elif key == 'cb_beschaffungsart_neu': elif key == 'cb_beschaffungsart_neu':
pass ret = self.cb_beschaffungsart_neu(value)
elif key == 'cb_mengeneinheit_neu': elif key == 'cb_mengeneinheit_neu':
pass ret = self.cb_mengeneinheit_neu(value)
elif key == 'cb_halbzeug_neu': elif key == 'cb_halbzeug_neu':
pass ret = self.cb_halbzeug_neu(value)
elif key == 'cb_dispogruppe_neu': elif key == 'cb_dispogruppe_neu':
pass ret = self.cb_dispogruppe_neu(value)
elif key == 'cb_dispolaufgruppe_neu': elif key == 'cb_dispolaufgruppe_neu':
pass ret = self.cb_dispolaufgruppe_neu(value)
elif key == 'cb_hersteller_neu': elif key == 'cb_hersteller_neu':
pass ret = self.cb_hersteller_neu(value)
elif key == 'cb_werkstoffdiskrepanz': elif key == 'cb_werkstoffdiskrepanz':
pass ret = self.cb_werkstoffdiskrepanz(value)
elif key == 'cb_werkstofftyp_neu': elif key == 'cb_werkstofftyp_neu':
pass ret = self.cb_werkstofftyp_neu(value)
# ret = self.cb_werkstofftyp_neu(value)
elif key == 'cb_material_neu': elif key == 'cb_material_neu':
pass ret = self.cb_material_neu(value)
elif key == 'cb_oberflaeche_neu': elif key == 'cb_oberflaeche_neu':
pass ret = self.cb_oberflaeche_neu(value)
elif key == 'cb_farbe_neu': elif key == 'cb_farbe_neu':
ret = self.cb_farbe_neu(value) ret = self.cb_farbe_neu(value)
else: else:
@@ -584,9 +590,9 @@ class GuiLogic():
# Entry-Abhängigkeit der Bezeichnung 1. keine eigene Callback. Abhängig von der Kategorie # Entry-Abhängigkeit der Bezeichnung 1. keine eigene Callback. Abhängig von der Kategorie
pdm_kat = ret["pdm_kategorie_neu"] pdm_kat = ret["pdm_kategorie_neu"]
if pdm_kat == "Baugruppe" or pdm_kat == "Schweissbaugruppe": if pdm_kat == "Baugruppe" or pdm_kat == "Schweissbaugruppe":
maxlen = 5 # Längenbeschränkung = 45 Zeichen maxlen = 45 # Längenbeschränkung = 45 Zeichen
else: else:
maxlen = 10 # Längenbeschränkung = 50 Zeichen maxlen = 50 # Längenbeschränkung = 50 Zeichen
text = self._model.get_gui_data("bezeichnung1_sivas") text = self._model.get_gui_data("bezeichnung1_sivas")
if len(text) > maxlen: if len(text) > maxlen:
ret["bezeichnung1_neu"] = text[0:maxlen] ret["bezeichnung1_neu"] = text[0:maxlen]
@@ -765,6 +771,147 @@ class GuiLogic():
pass pass
return ret 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): # def cb_werkstofftyp_neu(self, selected_werkstoff):
# """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche""" # """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche"""
@@ -802,6 +949,29 @@ class GuiLogic():
# } # }
# return ret # 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): # def oberfläche(self, selected):
# ret = dict() # ret = dict()
+37 -4
View File
@@ -1,4 +1,8 @@
import os import os
from manage_configs import SivasAssemblyData
from get_teilestamm import FetchSivasTeilestamm
""" """
Contains the logic for the MVC of CreoMigrate Gui 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) raise Exception("this path is not defined "+env_path)
return ret 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): def set_model(self, model):
self._model = model self._model = model
self.attach(model) self.attach(model)
@@ -89,9 +111,9 @@ class Controller(Observer):
self._view.data_from_model() self._view.data_from_model()
def get_current_asm_id(self): 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): 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): def set_current_item_id(self, cid):
@@ -103,10 +125,14 @@ class Controller(Observer):
red_ids = self._model.get_red_ids() red_ids = self._model.get_red_ids()
if not cid in red_ids: if not cid in red_ids:
return return
# TODO save current given data. In case, ask whether you should save or drop # 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 # 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) isok = self._model.from_json_file(self.get_env("out"), cid)
if isok == False: if isok == False:
@@ -162,6 +188,12 @@ class Controller(Observer):
#self._view.set_widget_status(widgetname, status) #self._view.set_widget_status(widgetname, status)
pass 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): def callback(self, key, value):
if not self._model: if not self._model:
raise Exception("no model yet added") raise Exception("no model yet added")
@@ -174,6 +206,7 @@ class Controller(Observer):
elif key == 'cb_zurücksetzen': elif key == 'cb_zurücksetzen':
pass pass
elif key == 'cb_suche_asm': elif key == 'cb_suche_asm':
#self._model.save_to_file()
pass pass
elif key == 'cb_3dsuchen': elif key == 'cb_3dsuchen':
self.suche_3d() self.suche_3d()
+2 -1
View File
@@ -459,7 +459,8 @@ class Configs:
def set_data_dir(self, data_dir): def set_data_dir(self, data_dir):
self._data_dir = 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): def set_env(self, env):
self._env = env self._env = env