gui Aufruf mit einem Assembly holt sich alle nötigen Infos von den DAtenbanken.

This commit is contained in:
2024-02-07 10:41:23 +01:00
parent 4777f5afbf
commit bd4b8d297e
6 changed files with 170 additions and 94 deletions
+11
View File
@@ -60,5 +60,16 @@
"-d"
],
}
{
"name": "Python: Build Real Gui",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"args": [
"-s 400102196"
],
}
]
}
+1 -1
View File
@@ -29,7 +29,7 @@ set BLACKLIST_DATABASE_NAME=ERP_BOM.ini
set VBA_MACRO_NAME=vba_format_excel.xlsm
set SIVAS_DATABASE_QUERY=Y:\jit\programme\Sivas2json.exe
set SIVAS_TEILESTAMM=\\195.243.223.3\sivas\jit\programme\KSbExcelExportSivasTeilestamm.exe
set SIVAS_EXCEL_EXPORT_DIR=%CREMIG_WORK%
set SIVAS_EXCEL_EXPORT_DIR=%CREMIG_DATA%
rem Um den Python-Interpreter auf U:\ zu nutzen, Kommentar (rem) in nachfolgender Zeile entfernen
rem set NETWORK_INTERPRETER_PATH=\\ssg.local\freigaben\Allgemein\Programmierumgebung\Python312
+59 -9
View File
@@ -44,6 +44,7 @@ class CadItem():
"halbzeugoberflaeche_neu",
"halbzeugfarbe_neu",
"lebenszyklus_status_neu",
"model3d_neu",
"bezeichnung1_sivas", "bezeichnung1_neu",
"bezeichnung2_sivas", "bezeichnung2_neu",
"halbzeugOhneSaege_sivas", "halbzeugOhneSaege_neu",
@@ -102,6 +103,38 @@ class CadItem():
"cb_zurücksetzen",
]
# dies sind die Excel Headel der SIVAS csv Export Datei
# und wie diese in das Datenmodell der Gui integriert werden kann
excel_to_gui = {
"Teilenummer":"teilenummer",
"Bezeichnung1":"bezeichnung1_sivas",
"Bezeichnung2":"bezeichnung2_sivas",
"Beschaffungsart":"beschaffungsart_sivas",
"Mengeneinheit":"mengeneinheit_sivas",
"Halbzeug":"halbzeug_sivas",
"TOS_Gruppe":"tosgruppe_sivas",
"Dispogruppe":"dispolaufgruppe_sivas",
"Dispolaufgruppe":"dispolaufgruppe_sivas",
"ErsatzFuer":"ersatzfuer_neu",
"ErsetztDurch":"ersetztdurch_neu",
"AktuellerIndex":"aenderungsindex_sivas",
"Hersteller":"hersteller_sivas",
"HerstellerTeilenummer":"herstteilenr_sivas",
"Version":"version_sivas",
"HalbzeugExtern":"halbzeug_sivas",
"Werkstoff":"werkstofftyp_sivas",
"Oberfläche":"cb_oberflaeche_neu",
# "Truemmer":"truemmer",
# "HzOhneSaegeliste":"",
"Ruestcode":"ruestcode_sivas",
"Fertigungsart":"fertigungsart_sivas",
"FosGruppe":"fosGruppe_sivas",
"Kalkulationsart":"kalkulationsart_sivas",
#"Indexerfasser":"",
"Aenderungstext":"aenderungstext_sivas",
"Freigabevermerk":"freigabevermerk_sivas",
# "Indexbearbeiter":"in"
}
def __init__(self):
""" is initalized with its unique id"""
@@ -190,20 +223,29 @@ class CadItem():
def get_all_gui_data(self):
return self.gui_data
def csv2guidata(self, data):
translated_data = dict()
for k,v in data.items():
if k in self.excel_to_gui and v is not None:
translated_data[self.excel_to_gui[k]] = v
# Spezial: Befüllung von Änderungstext mit dem Author, falls in der .csv vorhanden
if "Indexerfasser" in data and "Aenderungstext" in data:
translated_data["aenderungstext_sivas"] = '{aenderungstext} (von {author})'.format(aenderungstext=data["Aenderungstext"], author=data["Indexerfasser"])
# Indexerfasser wird nicht in der gui verwaltet. Deshalb Modifikation aus den Rohdaten
self.set_gui_dict(translated_data)
return translated_data
def sivas_data_from_csv(self, cid):
path = os.path.join(self.controller.get_env("data"), cid + '.csv')
if os.path.exists(path):
data = self.load_csv(path)
return data
return None
def sivas_data_from_json(self, cid):
path = os.path.join(self.controller.get_env("out"), cid + '.json')
if os.path.exists(path):
data = self.load(path)
data = self._load_csv(path)
return data
return None
def load_csv(self, path):
def _load_csv(self, path):
"""lädt die SIVAS csv Datei in die Felder für die Oberfläche """
if not os.path.exists(path):
return None
@@ -218,7 +260,13 @@ class CadItem():
value = None
ret[k] = value
return ret
def from_json_file(self, subpath, cid):
path = os.path.join(subpath, cid + '.json')
if os.path.exists(path):
self.load(path)
return False
def from_json(self, json_str):
jsonobj = json.loads(json_str)
@@ -236,6 +284,7 @@ class CadItem():
if "red_ids" in jsonobj:
red_ids = jsonobj["red_ids"]
self.set_red_ids(red_ids)
return True
def to_dict(self, tree=False ):
jsonobj = dict()
@@ -266,6 +315,7 @@ class CadItem():
except Exception:
raise Exception("guid_data, data, parent_children_mapping or red_ids not found")
def save(self, path, tree=False):
"""saves all data of model to a json string"""
with open(path, 'w') as f:
+93 -84
View File
@@ -84,29 +84,25 @@ class Controller():
# check before. change to given item just in case it is valid, e.g. name is a number of 9 digits
if not cid.isnumeric():
return
# nur die red-id Daten können geladen werden.
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)
# falls eine .json Datei davon existiert, dann diese zuerst versuchen zu laden
#self.model.load(demo_data)
gui_dict = None
loaded_json = self.model.sivas_data_from_json(cid)
if loaded_json:
# falls eine .json Datei dieser ID existiert, dann diese laden
gui_dict = self.logic.csv2guidata(loaded_csv)
self.model.set_gui_dict(gui_dict)
else:
# ansonsten die .csv Datei mit den SIVAS Infos holen
# TODO
loaded_csv = self.model.sivas_data_from_csv(cid)
if loaded_csv:
# und dann diese laden
gui_dict = self.logic.csv2guidata(loaded_csv)
if not gui_dict:
print("no file found "+ cid)
else:
self.refresh_gui()
# 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:
# ansonsten die .csv Datei mit den SIVAS Infos aus data holen
loaded = self.model.sivas_data_from_csv(cid)
if loaded == None:
print("no file found "+ cid)
else:
# und diese in der Gui setzen
set_data = self.model.csv2guidata(loaded)
self.refresh_gui()
def get_current_item_id(self):
return self.get_gui_data('teilenummer')
@@ -188,70 +184,34 @@ class GuiLogic():
self.config = configs
# hier sind alle Callbacks bzw. deren Comboboxen
# dies sind die Excel Headel der SIVAS csv Export Datei
# und wie diese in das Datenmodell der Gui integriert werden kann
self.excel_to_gui = {
"Teilenummer":"teilenummer",
"Bezeichnung1":"bezeichnung1_sivas",
"Bezeichnung2":"bezeichnung2_sivas",
"Beschaffungsart":"beschaffungsart_sivas",
"Mengeneinheit":"mengeneinheit_sivas",
"Halbzeug":"halbzeug_sivas",
"TOS_Gruppe":"tosgruppe_sivas",
"Dispogruppe":"dispolaufgruppe_sivas",
"Dispolaufgruppe":"dispolaufgruppe_sivas",
"ErsatzFuer":"ersatzfuer_neu",
"ErsetztDurch":"ersetztdurch_neu",
"AktuellerIndex":"aenderungsindex_sivas",
"Hersteller":"hersteller_sivas",
"HerstellerTeilenummer":"herstteilenr_sivas",
"Version":"version_sivas",
"HalbzeugExtern":"halbzeug_sivas",
"Werkstoff":"werkstofftyp_sivas",
"Oberfläche":"cb_oberflaeche_neu",
# "Truemmer":"truemmer",
# "HzOhneSaegeliste":"",
"Ruestcode":"ruestcode_sivas",
"Fertigungsart":"fertigungsart_sivas",
"FosGruppe":"fosGruppe_sivas",
"Kalkulationsart":"kalkulationsart_sivas",
#"Indexerfasser":"",
"Aenderungstext":"aenderungstext_sivas",
"Freigabevermerk":"freigabevermerk_sivas",
# "Indexbearbeiter":"in"
}
def csv2guidata(self, data):
ret = dict()
for k,v in data.items():
if k in self.excel_to_gui and v is not None:
ret[self.excel_to_gui[k]] = v
# Spezial: Befüllung von Änderungstext mit dem Author, falls in der .csv vorhanden
if "Indexerfasser" in data and "Aenderungstext" in data:
ret["aenderungstext_sivas"] = '{aenderungstext} (von {author})'.format(aenderungstext=data["Aenderungstext"], author=data["Indexerfasser"])
# Indexerfasser wird nicht in der gui verwaltet. Deshalb Modifikation aus den Rohdaten
self.model.set_gui_dict(ret)
def create_gui_dependencies(self, data):
# set defaults from given logic
r0 = self.callback("cb_pdm_kategorie_neu", None)
self.model.set_gui_dict(r0)
r1 = self.callback("cb_neuaufbau", None)
self.model.set_gui_dict(r1)
r2 = self.callback("cb_aus_halbzeug_neu", None)
self.model.set_gui_dict(r2)
r3 = self.callback("cb_halbzeugoberflaeche", None)
self.model.set_gui_dict(r3)
r4 = self.callback("cb_halbzeugfarbe", None)
self.model.set_gui_dict(r4)
# r0 = self.callback("cb_pdm_kategorie_neu", None)
# self.model.set_gui_dict(r0)
# r1 = self.callback("cb_neuaufbau", None)
# self.model.set_gui_dict(r1)
# r2 = self.callback("cb_aus_halbzeug_neu", None)
# self.model.set_gui_dict(r2)
# r3 = self.callback("cb_halbzeugoberflaeche", None)
# self.model.set_gui_dict(r3)
# r4 = self.callback("cb_halbzeugfarbe", None)
# self.model.set_gui_dict(r4)
# add entry dependencies
dep = self.entry_dependencies(ret)
self.model.set_gui_dict(dep)
return ret
def entry_dependencies(self, data):
return {}
value = None
r = self.cb_pdm_kategorie_neu(value)
self.model.set_gui_dict(r)
r= self.cb_neuaufbau(value)
self.model.set_gui_dict(r)
r= self.cb_aus_halbzeug_neu(value)
self.model.set_gui_dict(r)
r= self.cb_halbzeugoberflaeche(value)
self.model.set_gui_dict(r)
r= self.cb_halbzeugfarbe(value)
self.model.set_gui_dict(r)
r= self.cb_lebenszyklus_status_neu(value)
self.model.set_gui_dict(r)
r= self.cb_3Dmodel_neu(value)
self.model.set_gui_dict(r)
def callback(self, key, value):
@@ -268,9 +228,9 @@ class GuiLogic():
elif key == "cb_halbzeugfarbe":
return self.cb_halbzeugfarbe(value)
elif key == 'cb_lebenszyklus_status_neu':
pass
return self.cb_lebenszyklus_status_neu(value)
elif key == 'cb_3Dmodel_neu':
pass
return self.cb_3Dmodel_neu(value)
elif key == 'cb_halbzeugOhneSaege_neu':
pass
elif key == 'cb_ruestcode_neu':
@@ -344,7 +304,6 @@ class GuiLogic():
return ret
def cb_halbzeugoberflaeche(self, selected):
ret = dict()
aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu")
@@ -361,6 +320,16 @@ class GuiLogic():
'cb_halbzeugoberflaeche': "",
}
return ret
def cb_lebenszyklus_status_neu(self, selected):
ret = dict()
lstatus = self.config.Allgemein.get_options("Lebenszyklus") # Serie, Prototyp
if selected is None:
ret['lebenszyklus_status_neu'] = lstatus[0]
ret['cb_lebenszyklus_status_neu'] = lstatus
else:
ret['cb_lebenszyklus_status_neu'] = selected
return ret
def cb_halbzeugfarbe(self, selected):
ret = dict()
@@ -391,6 +360,46 @@ class GuiLogic():
pass
return ret
def cb_3Dmodel_neu(self, selected):
ret = dict()
pdm_kategorie_neu = self.model.get_gui_data("pdm_kategorie_neu")
if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe":
# Defaultwert = \\ssg.local\freigaben\Abteilungen\Entwicklung\CAD\Standards\SolidEdge\Template\DIN Metric\baugruppe.asm
# Dropdownwerte = keine
# state_ComboBox = disabled
# state_Button = disabled
# ret = {
# '': '',
# '': '',
# }
pass
elif pdm_kategorie_neu == "Kaufteil":
# Defaultwert = \\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\06_3D_Vorlagen\ET_mit_Volumen.par
# Dropdownwerte = keine
# state_ComboBox = disabled
# state_Button = disabled
pass
elif pdm_kategorie_neu == "Einzelteil":
aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu")
neuaufbau = self.model.get_gui_data("neuaufbau")
if aus_halbzeug == "True" or neuaufbau == "True":
# Defaultwert = \\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\06_3D_Vorlagen\ET_mit_Volumen.par
# Dropdownwerte = keine
# state_ComboBox = disabled
# state_Button = disabled
pass
else:
# Defaultwert = ""
# Dropdownwerte = Dateipfade von allen .par-Dateien, die die aktuelle Teilenummer im Dateinamen aufweisen und sich gleichzeitig in einem der rekursiv durchsuchten Pfade aus der Sektion "3D-Modelle" in "Zielpfade.cfg" befinden.
# state_ComboBox = readonly
# state_Button = keiner
# IF Button "Durchsuchen" geklickt und benutzerdefinierte Solid Edge-Datei gewählt:
# Defaultwert = Dateipfad der gewählten Solid Edge-Datei
pass
return ret
# def werkstofftyp(self, selected_werkstoff):
# """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche"""
+3
View File
@@ -13,6 +13,9 @@ class FetchSivasTeilestamm:
unmigrated_ids = self.migration.get_unmigrated_ids()
update_database.get_sivas_teilestamm(unmigrated_ids, self.csv_out_dir)
def get_red_ids(self):
return self.migration.get_unmigrated_ids()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='fetches data from sivas or ruledesigner fusion', prog='update_database')
+3
View File
@@ -364,6 +364,7 @@ class RightFramePDM(AllFrames):
"halbzeugoberflaeche_neu": self.halbzeugoberflaeche_neu.get(),
"halbzeugfarbe_neu": self.halbzeugfarbe_neu.get(),
"lebenszyklus_status_neu": self.lebenszyklus_status_neu.get(),
"model3d_neu": self.model3d_neu.get(),
# ab hier die Dropdowns der Oberfläche auslesen.
"cb_pdm_kategorie_neu": self.pdmkategorie_combo['values'],
"cb_lebenszyklus_status_neu": self.lebenszyklusstatus_combo['values'],
@@ -391,6 +392,8 @@ class RightFramePDM(AllFrames):
self.halbzeugfarbe_neu.set(data["halbzeugfarbe_neu"])
if 'lebenszyklus_status_neu' in data:
self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"])
if 'model3d_neu' in data:
self.model3d_neu.set(data["model3d_neu"])
if 'aus_halbzeug_neu' in data:
self.aus_halbzeug_neu= data["aus_halbzeug_neu"]
# ab hier die Dropdowns der Oberfläche befüllen.