From dc24a2593a6e8d4a8190fb2d8ca2117ae9bee243 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 5 Feb 2024 21:51:33 +0100 Subject: [PATCH 1/9] =?UTF-8?q?Falls=20das=20Modell=20nach=20einem=20Key?= =?UTF-8?q?=20gefragt=20wird,=20den=20es=20nicht=20gibt,=20als=20Default?= =?UTF-8?q?=20none=20zur=C3=BCck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/caditem.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/caditem.py b/lib/caditem.py index f4146e6..5e6510e 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -182,7 +182,10 @@ class CadItem(): self.gui_data[key] = val def get_gui_data(self, key): - return self.gui_data[key] + if key in self.gui_data: + return self.gui_data[key] + else: + return None def get_all_gui_data(self): return self.gui_data From 745012136b4d3b0ec80ef25db95265f941b9aa27 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 5 Feb 2024 21:59:14 +0100 Subject: [PATCH 2/9] =?UTF-8?q?einige=20Fixes=20in=20der=20gui=20bez=C3=BC?= =?UTF-8?q?glich=20helbzeugfarbe=20und=20deren=20CAllbacks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/gui.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/gui.py b/lib/gui.py index 8638d7e..f9a0c99 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -254,7 +254,7 @@ class RightFramePDM(AllFrames): self.neuaufbau_checkbutton = ttk.Checkbutton(frame, #text='ja', variable=self.neuaufbau, - command=lambda: self.callback("cb_neuaufbau", self.neuaufbau), + command=lambda:self.callback("cb_neuaufbau", self.neuaufbau), onvalue=True, offvalue=False) self.neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -267,7 +267,7 @@ class RightFramePDM(AllFrames): self.aushalbzeug_checkbutton = ttk.Checkbutton(frame, #text='neu', variable=self.aus_halbzeug_neu, - command=lambda: self.callback("cb_aus_halbzeug_neu", self.aus_halbzeug_neu), + command=lambda:self.callback("cb_aus_halbzeug_neu", self.aus_halbzeug_neu), onvalue=True, offvalue=False) self.aushalbzeug_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -295,7 +295,7 @@ class RightFramePDM(AllFrames): self.halbzeugoberflaeche_neu = tk.StringVar() self.halbzeugoberflaeche_combo = ttk.Combobox(frame, textvariable=self.halbzeugoberflaeche_neu) self.halbzeugoberflaeche_combo['state'] = 'readonly' - self.halbzeugoberflaeche_combo.bind('<>', lambda event:self.callback('cb_halbzeugoberflaeche', self.lebenszyklus_status_neu.get())) + self.halbzeugoberflaeche_combo.bind('<>', lambda event:self.callback('cb_halbzeugoberflaeche', self.halbzeugoberflaeche_neu.get())) self.halbzeugoberflaeche_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 @@ -362,6 +362,7 @@ class RightFramePDM(AllFrames): "halbzeugnummer_neu": self.halbzeugnummer_neu.get(), "halbzeuglaenge_neu": self.halbzeuglaenge_neu.get(), "halbzeugoberflaeche_neu": self.halbzeugoberflaeche_neu.get(), + "halbzeugfarbe_neu": self.halbzeugfarbe_neu.get(), "lebenszyklus_status_neu": self.lebenszyklus_status_neu.get(), # ab hier die Dropdowns der Oberfläche auslesen. "cb_halbzeugoberflaeche": self.halbzeugoberflaeche_combo['values'], @@ -385,6 +386,8 @@ class RightFramePDM(AllFrames): self.halbzeuglaenge_neu.set(data["halbzeuglaenge_neu"]) if 'halbzeugoberflaeche_neu' in data: self.halbzeugoberflaeche_neu.set(data["halbzeugoberflaeche_neu"]) + if 'halbzeugfarbe_neu' in data: + self.halbzeugfarbe_neu.set(data["halbzeugfarbe_neu"]) if 'lebenszyklus_status_neu' in data: self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"]) if 'aus_halbzeug_neu' in data: From 62d328b46efb5d0c906819a8e44b23f2648ffc50 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 5 Feb 2024 22:00:45 +0100 Subject: [PATCH 3/9] laden der Sivas Daten aus .csv bzw. .json impl. Check der Keys in der Logik vereinfacht. Erste Tests der Callbackroutinen beim Laden des .csv Files --- lib/controller.py | 343 +++++++++++++++++++++++----------------------- 1 file changed, 168 insertions(+), 175 deletions(-) diff --git a/lib/controller.py b/lib/controller.py index d1a1b76..649dad2 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -30,79 +30,7 @@ messages = { } -# die folgende Hash ist nur für schnelleres Editieren hier -gui_data_keys = [ - "asm_id", - "teilenummer", - "datenbank", - "pdm_kategorie_neu", - "neuaufbau", - "aus_halbzeug_neu", - "halbzeugnummer_neu", - "halbzeuglaenge_neu", - "halbzeugoberflaeche_neu", - "lebenszyklus_status_neu", - "bezeichnung1_sivas", "bezeichnung1_neu", - "bezeichnung2_sivas", "bezeichnung2_neu", - "halbzeugOhneSaege_sivas", "halbzeugOhneSaege_neu", - "ruestcode_sivas", "ruestcode_neu", - "fertigungsart_sivas", "fertigungsart_neu", - "allgemeintoleranz_sivas", "allgemeintoleranz_neu", - "fosGruppe_sivas", "fosGruppe_neu", - "kalkulationsart_sivas", "kalkulationsart_neu", - "beschaffungsart_sivas", "beschaffungsart_neu", - "mengeneinheit_sivas", "mengeneinheit_neu", - "halbzeug_sivas", "halbzeug_neu", - "tosgruppe_sivas", "tosgruppe_neu", - "dispogruppe_sivas", "dispogruppe_neu", - "dispolaufgruppe_sivas","dispolaufgruppe_neu", - "hersteller_sivas", "hersteller_neu", - "ersatzfuer_sivas", "ersatzfuer_neu", - "ersetztdurch_sivas", "ersetztdurch_neu", - "herstteilenr_sivas", "herstteilenr_neu", - "werkstoffdiskr_sivas", - "werkstofftyp_sivas", "werkstofftyp_neu", - "material_sivas", "material_neu", - "oberflaeche_neu", - "farbe_neu", - "version_sivas", "version_neu", - "aenderungsindex_sivas", "aenderungsindex_neu", - "aenderungstext_sivas", "aenderungstext_neu", - "freigabevermerk_sivas", "freigabevermerk_neu", - "zusatzinfos_auto_text", - "zusatzinfos_bendef_text", - # Felder der Comboboxen. benannt wie deren callbacks - "cb_pdm_kategorie_neu", - "cb_halbzeug_neu", - "cb_halbzeugoberflaeche", - "cb_halbzeugfarbe", - "cb_lebenszyklus_status_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_dispogruppe_neu", - "cb_dispolaufgruppe_neu", - "cb_hersteller_neu", - "cb_werkstofftyp_neu", - "cb_material_neu", - "cb_oberflaeche_neu", - "cb_farbe_neu", - # buttons - "cb_speichern", - "cb_migrieren", - "cb_zurücksetzen", -] - - class Controller(): - - """ Class for manipulating the model and returning data for the view """ @@ -152,12 +80,36 @@ class Controller(): def set_current_item_id(self, cid): + """setze eine neue Item ID """ + # 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 + + # TODO save current given data. In case, ask whether you should save or drop self.set_gui_data('teilenummer', cid) - - loaded_csv = self.model.sivas_data_from_csv(cid) - gui_dict = self.logic.csv2guidata(loaded_csv) - self.model.set_gui_dict(gui_dict) - self.refresh_gui() + + # 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) + 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.model.set_gui_dict(gui_dict) + self.refresh_gui() + + def get_current_item_id(self): + return self.get_gui_data('teilenummer') def set_red_ids(self, red_ids): @@ -201,10 +153,28 @@ class Controller(): def callback(self, key, value): if not self.logic: return + + # Logik um neue Werte in Oberfläche oder Modell zu füllen model_values = self.logic.callback(key, value) if model_values: self.set_gui_dict(model_values) self.refresh_gui() + + # reine Aktionen + if key == 'cb_speichern': + self.save_to_file() + elif key == 'cb_migrieren': + pass + elif key == 'cb_zurücksetzen': + pass + elif key == 'cb_suche_asm': + pass + + def save_to_file(self): + """speichert die bisherigen Eingaben beider Spalten in eine json Datei""" + path = os.path.join(self.get_env("out"), str(self.get_current_item_id()) + '.json') + # die Bauminfos und RedIds dazu werden standardmässig nicht mit gemerkt. + self.model.save(path, False) class GuiLogic(): """ @@ -217,34 +187,7 @@ class GuiLogic(): # hier holt man die Daten der Configs self.config = configs # hier sind alle Callbacks bzw. deren Comboboxen - self.callbacks = [ - 'cb_pdm_kategorie_neu', - 'cb_neuaufbau', - 'cb_aus_halbzeug_neu', - 'cb_lebenszyklus_status_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', - 'cb_werkstofftyp_neu', - 'cb_material_neu', - 'cb_oberflaeche_neu', - 'cb_farbe_neu', - 'cb_speichern', - 'cb_migrieren', - 'cb_zurücksetzen', - 'cb_suche_asm' - ] + # 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 = { @@ -294,6 +237,8 @@ class GuiLogic(): ret.update(r1) r2 = self.callback("cb_aus_halbzeug_neu", None) ret.update(r2) + r3 = self.callback("cb_halbzeugoberflaeche", None) + ret.update(r3) # add entry dependencies dep = self.entry_dependencies(ret) @@ -301,24 +246,20 @@ class GuiLogic(): return ret def entry_dependencies(self, data): - ret = dict() + return {} - halbzeugoberflaeche = data["halbzeugoberflaeche_neu"] - if data["aus_halbzeug_neu"] == True: - if halbzeugoberflaeche == "eloxieren" or halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": - pass - else: - ret["halbzeugoberflaeche_neu"] = '' - else: - ret["halbzeugoberflaeche_neu"] = '' - return ret def callback(self, key, value): """gibt ein dict zurück, welches neu im Modell gesetzt wird""" - if key not in self.callbacks: - raise Exception("this callback does not exist "+key) + if key == 'cb_pdm_kategorie_neu': pass + elif key == "cb_halbzeug_neu": + pass + elif key == "cb_halbzeugoberflaeche": + return self.halbzeug_oberflaeche_neu(value) + elif key == "cb_halbzeugfarbe": + return self.halbzeug_farbe_neu(value) elif key == 'cb_neuaufbau': return self.neuaufbau(value) elif key == 'cb_aus_halbzeug_neu': @@ -354,7 +295,8 @@ class GuiLogic(): elif key == 'cb_werkstoffdiskrepanz': pass elif key == 'cb_werkstofftyp_neu': - return self.werkstofftyp(value) + pass + # return self.werkstofftyp(value) elif key == 'cb_material_neu': pass elif key == 'cb_oberflaeche_neu': @@ -383,67 +325,11 @@ class GuiLogic(): ret = dict() pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") if pdm_kat == "Einzelteil": - pass + ret = self.callback("cb_halbzeugoberflaeche", None) else: ret["aus_halbzeug_neu"] = False return ret - def werkstofftyp(self, selected_werkstoff): - """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche""" - - # Logik, die steuert, welcher Defaultwert gilt: - - # In den nachfolgenden Fällen darf kein Defaultwert eingetragen - # werden (selbst wenn in from_siv.csv ein Wert in der Spalte - # "Werkstoff" eingetragen sein sollte): - # PDM-Kategorie == "Baugruppe" - # PDM-Kategorie == "Schweissbaugruppe" - # PDM-Kategorie == "Einzelteil" und Aus Halbzeug == True (Haken gesetzt) - - # Gilt PDM-Kategorie == "Kaufteil" soll der Defaultwert "siehe - # Hersteller" eingetragen werden - - # Gilt PDM-Kategorie == "Einzelteil" und Aus Halbzeug == False (kein - # Haken), dann wird der Defaultwert wie folgt bestimmt: - ret = dict() - # das Feld selbst mit dem Selektierten beschreiben - ret['werkstofftyp_neu']= selected_werkstoff - - pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") - aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") - - if pdm_kat == 'Einzelteil' and aus_halbzeug is False: - wnamen = self.config.Werkstoffe.get_werkstoffe_of_name(selected_werkstoff) - # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell - ret = { - # das Feld selbst mit dem Selektierten beschreiben - 'werkstofftyp_neu': selected_werkstoff, - # die neuen Inhalte der comboboxen setzen - 'cb_material_neu': wnamen, - # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen - 'material_neu': wnamen[0], - } - return ret - - def oberfläche(self, selected): - - ret = dict() - # das Feld selbst mit dem Selektierten beschreiben - ret['oberflaeche_neu']= selected - - pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") - aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") - - if pdm_kat == 'Einzelteil' and aus_halbzeug is False: - onamen = self.config.Oberfläche.get_oberfläche_of_type(selected) - # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell - ret = { - # die neuen Inhalte der comboboxen setzen - 'cb_oberflaeche_neu': onamen, - # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen - 'oberflaeche_neu': onamen[0], - } - return ret def farbe(self, selected): farben_alle = self.config.Farben.get_farbauswahl() @@ -460,6 +346,113 @@ class GuiLogic(): return ret + def halbzeug_oberflaeche_neu(self, selected): + ret = dict() + aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") + if aus_halbzeug == "True": + oarten = self.config.Oberfläche.get_oberflächen_behandlungen() + if not selected is None: + ret['cb_halbzeugoberflaeche'] = selected + else: + ret = { + 'halbzeugoberflaeche_neu': oarten[0], + 'cb_halbzeugoberflaeche': oarten, + } + else: + ret = { + 'halbzeugoberflaeche_neu': "", + 'cb_halbzeugoberflaeche': "", + } + return ret + + def halbzeug_farbe_neu(self, selected): + ret = dict() + data = self.model.get_gui_data("halbzeug_farbe_neu") + if "halbzeugoberflaeche_neu" in data: + halbzeugoberflaeche = data["halbzeugoberflaeche_neu"] + if data["aus_halbzeug_neu"] == True: + if halbzeugoberflaeche == "eloxieren" or halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": + if halbzeugoberflaeche == "eloxieren": + farben_elox = self.config.Farben.get_farben_eloxieren() + # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + ret = { + # die neuen Inhalte der comboboxen setzen + 'halbzeugfarbe_neu': farben_elox[0], + 'cb_halbzeugfarbe': farben_elox, + + } + elif halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": + farbauswahl = self.config.Farben.get_farbauswahl() + # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + ret = { + 'halbzeugfarbe_neu': farbauswahl[0], + 'cb_halbzeugfarbe': farbauswahl, + } + + else: + ret["halbzeugoberflaeche_neu"] = '' + else: + ret["halbzeugoberflaeche_neu"] = '' + return ret + + + # def werkstofftyp(self, selected_werkstoff): + # """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche""" + + # # Logik, die steuert, welcher Defaultwert gilt: + + # # In den nachfolgenden Fällen darf kein Defaultwert eingetragen + # # werden (selbst wenn in from_siv.csv ein Wert in der Spalte + # # "Werkstoff" eingetragen sein sollte): + # # PDM-Kategorie == "Baugruppe" + # # PDM-Kategorie == "Schweissbaugruppe" + # # PDM-Kategorie == "Einzelteil" und Aus Halbzeug == True (Haken gesetzt) + + # # Gilt PDM-Kategorie == "Kaufteil" soll der Defaultwert "siehe + # # Hersteller" eingetragen werden + + # # Gilt PDM-Kategorie == "Einzelteil" und Aus Halbzeug == False (kein + # # Haken), dann wird der Defaultwert wie folgt bestimmt: + # ret = dict() + # # das Feld selbst mit dem Selektierten beschreiben + # ret['werkstofftyp_neu']= selected_werkstoff + + # pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") + # aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") + + # if pdm_kat == 'Einzelteil' and aus_halbzeug is False: + # wnamen = self.config.Werkstoffe.get_werkstoffe_of_name(selected_werkstoff) + # # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + # ret = { + # # das Feld selbst mit dem Selektierten beschreiben + # 'werkstofftyp_neu': selected_werkstoff, + # # die neuen Inhalte der comboboxen setzen + # 'cb_material_neu': wnamen, + # # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen + # 'material_neu': wnamen[0], + # } + # return ret + + # def oberfläche(self, selected): + + # ret = dict() + # # das Feld selbst mit dem Selektierten beschreiben + # ret['oberflaeche_neu']= selected + + # pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") + # aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") + + # if pdm_kat == 'Einzelteil' and aus_halbzeug is False: + # onamen = self.config.Oberfläche.get_oberfläche_of_type(selected) + # # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + # ret = { + # # die neuen Inhalte der comboboxen setzen + # 'cb_oberflaeche_neu': onamen, + # # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen + # 'oberflaeche_neu': onamen[0], + # } + # return ret + if __name__ == "__main__": pass From 6a50eef3ed3ac10728e6ef80d9346acdc1de13b5 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 5 Feb 2024 22:01:20 +0100 Subject: [PATCH 4/9] =?UTF-8?q?Routine=20zur=20Abfrage=20aller=20Oberfl?= =?UTF-8?q?=C3=A4chenbehandlungen=20dazu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/manage_configs.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/manage_configs.py b/lib/manage_configs.py index 6c15c0b..2231521 100644 --- a/lib/manage_configs.py +++ b/lib/manage_configs.py @@ -364,6 +364,10 @@ class OberflächeConfig(IniBasedConfig): """hole alle Oberflächen, welche als Sektionen in der config gegeben sind, also OberflächenbehandlungStahl, OberflächenbehandlungAluminium, ... """ return super().sections() + + def get_oberflächen_behandlungen(self): + """hole alle möglichen Arten von Oberflächenbehandlungen""" + return super().get_section_options('Oberflaechenbehandlungen') def get_oberfläche_of_type(self, otype): """hole alle möglichen Oberflächen Behandlungsarten zum gegebenen Material From 037ad07806cc4ae3126cbc9916f68e284d88f268 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 6 Feb 2024 10:49:35 +0100 Subject: [PATCH 5/9] PDM-Kategorie sollte einen Eintrag haben, wenn nicht definiert --- cfg/Allgemein.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/cfg/Allgemein.cfg b/cfg/Allgemein.cfg index 853790c..a59589c 100644 --- a/cfg/Allgemein.cfg +++ b/cfg/Allgemein.cfg @@ -1,4 +1,5 @@ [Kategorien] + Baugruppe Einzelteil Kaufteil From 8e6b57a2198773e2e1cce6dbf2cc43b525de6f41 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 6 Feb 2024 12:34:19 +0100 Subject: [PATCH 6/9] Demodaten reduziert, um Controller zu testen --- CreoMigrate.code-workspace | 13 ------------- lib/CreoMigrateGui.py | 5 +---- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 CreoMigrate.code-workspace diff --git a/CreoMigrate.code-workspace b/CreoMigrate.code-workspace deleted file mode 100644 index 53db69b..0000000 --- a/CreoMigrate.code-workspace +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": { - "[python]": { - "editor.defaultFormatter": "ms-python.autopep8" - }, - "python.formatting.provider": "none" - } -} \ No newline at end of file diff --git a/lib/CreoMigrateGui.py b/lib/CreoMigrateGui.py index 7439c22..f9d194a 100644 --- a/lib/CreoMigrateGui.py +++ b/lib/CreoMigrateGui.py @@ -59,13 +59,10 @@ demo_data = """ "gui_data": { "asm_id": "400102190", "teilenummer": "400102195", - "pdm_kategorie_neu": "Einzelteil", "neuaufbau": "False", "lebenszyklus_status_neu": "Serie", "aus_halbzeug_neu": "True", - "zusatzinfos_auto_text": "Dies sind neue Zusatzinfos", - "cb_lebenszyklus_status_neu": ["Serie", "Prototyp"], - "cb_werkstofftyp_neu": ["Stahl", "Aluminium", "Kunst-/ Verbundstoff", "Schwermetall"] + "zusatzinfos_auto_text": "Dies sind neue Zusatzinfos" }, "data": {} } From 6c1bb728c76424f3dce2a025c6aec1e9d08ffbd7 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 6 Feb 2024 12:34:52 +0100 Subject: [PATCH 7/9] fix:Halbzeugfarbe Callback vergessen --- lib/caditem.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/caditem.py b/lib/caditem.py index 5e6510e..8ea38f4 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -42,6 +42,7 @@ class CadItem(): "halbzeugnummer_neu", "halbzeuglaenge_neu", "halbzeugoberflaeche_neu", + "halbzeugfarbe_neu", "lebenszyklus_status_neu", "bezeichnung1_sivas", "bezeichnung1_neu", "bezeichnung2_sivas", "bezeichnung2_neu", From 716ff80905845f6659627f1e0990e018496bc9e1 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 6 Feb 2024 12:37:28 +0100 Subject: [PATCH 8/9] Callbackfunktionen gleich benannt wie die jeweiligen Callbacks. Pflege der DAten beim csv Import immer gleich nach dem Aufruf der Callbackfunktion, da jede Callback auf Daten daraus zugreift --- lib/controller.py | 143 +++++++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/lib/controller.py b/lib/controller.py index 649dad2..de7ae1c 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -95,6 +95,7 @@ class Controller(): 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 @@ -105,7 +106,6 @@ class Controller(): if not gui_dict: print("no file found "+ cid) else: - self.model.set_gui_dict(gui_dict) self.refresh_gui() def get_current_item_id(self): @@ -231,18 +231,23 @@ class GuiLogic(): 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) + # 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) - ret.update(r1) + self.model.set_gui_dict(r1) r2 = self.callback("cb_aus_halbzeug_neu", None) - ret.update(r2) + self.model.set_gui_dict(r2) r3 = self.callback("cb_halbzeugoberflaeche", None) - ret.update(r3) + 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) - ret.update(dep) + self.model.set_gui_dict(dep) return ret def entry_dependencies(self, data): @@ -253,17 +258,15 @@ class GuiLogic(): """gibt ein dict zurück, welches neu im Modell gesetzt wird""" if key == 'cb_pdm_kategorie_neu': - pass - elif key == "cb_halbzeug_neu": - pass - elif key == "cb_halbzeugoberflaeche": - return self.halbzeug_oberflaeche_neu(value) - elif key == "cb_halbzeugfarbe": - return self.halbzeug_farbe_neu(value) + return self.cb_pdm_kategorie_neu(value) elif key == 'cb_neuaufbau': - return self.neuaufbau(value) + return self.cb_neuaufbau(value) elif key == 'cb_aus_halbzeug_neu': - return self.aus_halbzeug_neu(value) + return self.cb_aus_halbzeug_neu(value) + elif key == "cb_halbzeugoberflaeche": + return self.cb_halbzeugoberflaeche(value) + elif key == "cb_halbzeugfarbe": + return self.cb_halbzeugfarbe(value) elif key == 'cb_lebenszyklus_status_neu': pass elif key == 'cb_3Dmodel_neu': @@ -302,7 +305,7 @@ class GuiLogic(): elif key == 'cb_oberflaeche_neu': pass elif key == 'cb_farbe_neu': - return self.farbe(value) + return self.cb_farbe_neu(value) elif key == 'cb_speichern': pass elif key == 'cb_migrieren': @@ -313,51 +316,45 @@ class GuiLogic(): pass else: raise Exception("this callback does not exist "+key) + + def cb_pdm_kategorie_neu(self, selected): + ret = dict() + categories = self.config.Allgemein.get_options("Kategorien") + if selected is None: + ret['pdm_kategorie_neu'] = categories[0] + ret['cb_pdm_kategorie_neu'] = categories + else: + ret['pdm_kategorie_neu'] = selected + return ret - def neuaufbau(self, trueOrfalse): + def cb_neuaufbau(self, trueOrfalse): ret = dict() pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") if pdm_kat != "Einzelteil" or pdm_kat != "Kaufteil": ret["neuaufbau"] = False return ret - def aus_halbzeug_neu(self, trueOrfalse): + def cb_aus_halbzeug_neu(self, trueOrfalse): ret = dict() pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") if pdm_kat == "Einzelteil": - ret = self.callback("cb_halbzeugoberflaeche", None) + pass else: ret["aus_halbzeug_neu"] = False return ret - def farbe(self, selected): - farben_alle = self.config.Farben.get_farbauswahl() - farben_elox = self.config.Farben.get_farben_eloxieren() - # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell - ret = { - # das Feld selbst mit dem Selektierten beschreiben - 'farbe_neu': selected, - # die neuen Inhalte der comboboxen setzen - 'cb_farben': farben_alle, - # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen - 'farbe_neu': farben_alle[0], - } - return ret - - def halbzeug_oberflaeche_neu(self, selected): + def cb_halbzeugoberflaeche(self, selected): ret = dict() aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") if aus_halbzeug == "True": oarten = self.config.Oberfläche.get_oberflächen_behandlungen() - if not selected is None: - ret['cb_halbzeugoberflaeche'] = selected - else: - ret = { - 'halbzeugoberflaeche_neu': oarten[0], - 'cb_halbzeugoberflaeche': oarten, - } + if selected is None: + ret['halbzeugoberflaeche_neu'] = oarten[0] + ret['cb_halbzeugoberflaeche'] = oarten + else: + ret['halbzeugoberflaeche_neu'] = selected else: ret = { 'halbzeugoberflaeche_neu': "", @@ -365,34 +362,33 @@ class GuiLogic(): } return ret - def halbzeug_farbe_neu(self, selected): + def cb_halbzeugfarbe(self, selected): ret = dict() - data = self.model.get_gui_data("halbzeug_farbe_neu") - if "halbzeugoberflaeche_neu" in data: - halbzeugoberflaeche = data["halbzeugoberflaeche_neu"] - if data["aus_halbzeug_neu"] == True: - if halbzeugoberflaeche == "eloxieren" or halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": - if halbzeugoberflaeche == "eloxieren": - farben_elox = self.config.Farben.get_farben_eloxieren() - # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell - ret = { - # die neuen Inhalte der comboboxen setzen - 'halbzeugfarbe_neu': farben_elox[0], - 'cb_halbzeugfarbe': farben_elox, + halbzeugoberflaeche = self.model.get_gui_data("halbzeugoberflaeche_neu") + aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") - } - elif halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": - farbauswahl = self.config.Farben.get_farbauswahl() - # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell - ret = { - 'halbzeugfarbe_neu': farbauswahl[0], - 'cb_halbzeugfarbe': farbauswahl, - } - + # setze die Inhalte der abhängigen Comboboxen neu + ret = { + 'halbzeugfarbe_neu': '', + 'cb_halbzeugfarbe': '', + } + if aus_halbzeug == "True": + if halbzeugoberflaeche == "eloxieren": + farben_elox = self.config.Farben.get_farben_eloxieren() + if selected is None: + ret['halbzeugfarbe_neu'] = farben_elox[0] # Default, falls nichts gewählt ist + ret['cb_halbzeugfarbe'] = farben_elox # Liste in der Combobox else: - ret["halbzeugoberflaeche_neu"] = '' - else: - ret["halbzeugoberflaeche_neu"] = '' + ret['halbzeugfarbe_neu'] = selected # vom Nutzer ausgewählter Wert + elif halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": + farbauswahl = self.config.Farben.get_farbauswahl() + if selected is None: + ret['halbzeugfarbe_neu'] = farbauswahl[0] + ret['cb_halbzeugfarbe'] = farbauswahl + else: + ret['halbzeugfarbe_neu'] = selected + else: + pass return ret @@ -453,6 +449,21 @@ class GuiLogic(): # } # return ret + def cb_farbe_neu(self, selected): + farben_alle = self.config.Farben.get_farbauswahl() + farben_elox = self.config.Farben.get_farben_eloxieren() + # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + ret = { + # das Feld selbst mit dem Selektierten beschreiben + 'farbe_neu': selected, + # die neuen Inhalte der comboboxen setzen + 'cb_farben': farben_alle, + # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen + 'farbe_neu': farben_alle[0], + } + return ret + + if __name__ == "__main__": pass From 6f2402dea4133384fd1cd76d25f1b4834679d4f0 Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 6 Feb 2024 12:38:10 +0100 Subject: [PATCH 9/9] =?UTF-8?q?Comboboxen=20nicht=20mehr=20bef=C3=BCllen,?= =?UTF-8?q?=20da=20sie=20nach=20dem=20Start=20ja=20auch=20leer=20sein=20m?= =?UTF-8?q?=C3=BCssen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/gui.py | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/gui.py b/lib/gui.py index f9a0c99..09e82ac 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -235,12 +235,12 @@ class RightFramePDM(AllFrames): self.rownum += 1 # pdmkategorie - categories = configs.Allgemein.get_options("Kategorien") #"Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe" + #categories = configs.Allgemein.get_options("Kategorien") #"Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe" pdmkategorie_label = ttk.Label(frame, text="PDM-Kategorie:" ) pdmkategorie_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.pdm_category = tk.StringVar() self.pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category) - self.pdmkategorie_combo['values'] = categories + #self.pdmkategorie_combo['values'] = categories self.pdmkategorie_combo['state'] = 'readonly' self.pdmkategorie_combo.bind('<>', lambda event:self.callback('cb_pdm_kategorie_neu', self.pdm_category.get())) self.pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -365,11 +365,12 @@ class RightFramePDM(AllFrames): "halbzeugfarbe_neu": self.halbzeugfarbe_neu.get(), "lebenszyklus_status_neu": self.lebenszyklus_status_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'], "cb_halbzeugoberflaeche": self.halbzeugoberflaeche_combo['values'], "cb_halbzeugfarbe": self.halbzeugfarbe_combo['values'], - "cb_lebenszyklus_status_neu": self.lebenszyklusstatus_combo['values'], "cb_3Dmodel_neu": self.model3d_combo['values'], - "cb_pdm_kategorie_neu": self.pdmkategorie_combo['values'], + } def data_from_model(self): @@ -415,7 +416,7 @@ class RightFrameBezeichnung(AllFrames): self.rownum = AllFrames.get_rows(self) col_left = 0 - categories = configs.Allgemein.get_options("Kategorien") + #categories = configs.Allgemein.get_options("Kategorien") # Bezeichnung 1 bezeichnung1_label = ttk.Label(frame, text="Bezeichnung 1:" ) @@ -471,8 +472,8 @@ class RightFrameHalbzeugOhneS(AllFrames): self.rownum = AllFrames.get_rows(self) col_left = 0 - categories = configs.Allgemein.get_options("Kategorien") - ruestcodes = configs.Allgemein.get_options("Ruestcode") + # categories = configs.Allgemein.get_options("Kategorien") + # ruestcodes = configs.Allgemein.get_options("Ruestcode") # Halbzeug ohne Sägeliste halbzeugOhneSaege_label = ttk.Label(frame, text="Halbzeug ohne Sägeliste:" ) @@ -498,7 +499,7 @@ class RightFrameHalbzeugOhneS(AllFrames): self.ruestcode_neu = tk.StringVar() self.ruestcode_neu_combo = ttk.Combobox(frame, textvariable=self.ruestcode_neu) - self.ruestcode_neu_combo['values'] = ruestcodes + #self.ruestcode_neu_combo['values'] = ruestcodes self.ruestcode_neu_combo['state'] = 'readonly' self.ruestcode_neu_combo.bind('<>', lambda event:self.callback('cb_ruestcode_neu', self.ruestcode_neu.get())) self.ruestcode_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -513,7 +514,7 @@ class RightFrameHalbzeugOhneS(AllFrames): self.fertigungsart_neu = tk.StringVar() self.fertigungsart_neu_combo = ttk.Combobox(frame, textvariable=self.fertigungsart_neu) - self.fertigungsart_neu_combo['values'] = categories + #self.fertigungsart_neu_combo['values'] = categories self.fertigungsart_neu_combo['state'] = 'readonly' self.fertigungsart_neu_combo.bind('<>', lambda event:self.callback('cb_fertigungsart_neu', self.fertigungsart_neu.get())) self.fertigungsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -528,7 +529,7 @@ class RightFrameHalbzeugOhneS(AllFrames): self.allgemeintoleranz_neu = tk.StringVar() self.allgemeintoleranz_neu_combo = ttk.Combobox(frame, textvariable=self.allgemeintoleranz_neu) - self.allgemeintoleranz_neu_combo['values'] = categories + #self.allgemeintoleranz_neu_combo['values'] = categories self.allgemeintoleranz_neu_combo['state'] = 'readonly' self.allgemeintoleranz_neu_combo.bind('<>', lambda event:self.callback('cb_allgemeintoleranz_neu', self.allgemeintoleranz_neu.get())) self.allgemeintoleranz_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -543,7 +544,7 @@ class RightFrameHalbzeugOhneS(AllFrames): self.fosGruppe_neu = tk.StringVar() self.fosGruppe_neu_combo = ttk.Combobox(frame, textvariable=self.fosGruppe_neu) - self.fosGruppe_neu_combo['values'] = categories + #self.fosGruppe_neu_combo['values'] = categories self.fosGruppe_neu_combo['state'] = 'readonly' self.fosGruppe_neu_combo.bind('<>', lambda event:self.callback('cb_fosGruppe_neu', self.fosGruppe_neu.get())) self.fosGruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -558,7 +559,7 @@ class RightFrameHalbzeugOhneS(AllFrames): self.kalkulationsart_neu = tk.StringVar() self.kalkulationsart_neu_combo = ttk.Combobox(frame, textvariable=self.kalkulationsart_neu) - self.kalkulationsart_neu_combo['values'] = categories + #self.kalkulationsart_neu_combo['values'] = categories self.kalkulationsart_neu_combo['state'] = 'readonly' self.kalkulationsart_neu_combo.bind('<>', lambda event:self.callback('cb_kalkulationsart_neu', self.kalkulationsart_neu.get())) self.kalkulationsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -645,7 +646,7 @@ class RightFrameBeschaffungsart(AllFrames): self.rownum = AllFrames.get_rows(self) col_left = 0 - categories = configs.Allgemein.get_options("Kategorien") + #categories = configs.Allgemein.get_options("Kategorien") # Beschaffungsart beschaffungsart_label = ttk.Label(frame, text="Beschaffungsart:" ) @@ -656,7 +657,7 @@ class RightFrameBeschaffungsart(AllFrames): self.beschaffungsart_neu = tk.StringVar() self.beschaffungsart_combo = ttk.Combobox(frame, textvariable=self.beschaffungsart_neu) - self.beschaffungsart_combo['values'] = categories + #self.beschaffungsart_combo['values'] = categories self.beschaffungsart_combo['state'] = 'readonly' self.beschaffungsart_combo.bind('<>', lambda event:self.callback('cb_beschaffungsart_neu', self.beschaffungsart_neu.get())) self.beschaffungsart_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -671,7 +672,7 @@ class RightFrameBeschaffungsart(AllFrames): self.mengeneinheit_neu = tk.StringVar() self.mengeneinheit_combo = ttk.Combobox(frame, textvariable=self.mengeneinheit_neu) - self.mengeneinheit_combo['values'] = categories + #self.mengeneinheit_combo['values'] = categories self.mengeneinheit_combo['state'] = 'readonly' self.mengeneinheit_combo.bind('<>', lambda event:self.callback('cb_mengeneinheit_neu', self.mengeneinheit_neu.get())) self.mengeneinheit_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -744,7 +745,7 @@ class RightFrameTOSGruppe(AllFrames): self.rownum = AllFrames.get_rows(self) col_left = 0 - categories = configs.Allgemein.get_options("Kategorien") + #categories = configs.Allgemein.get_options("Kategorien") # TOS-Gruppe tosgruppe_label = ttk.Label(frame, text="TOS-Gruppe:" ) @@ -766,7 +767,7 @@ class RightFrameTOSGruppe(AllFrames): self.dispogruppe_neu = tk.StringVar() self.dispogruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispogruppe_neu) - self.dispogruppe_neu_combo['values'] = categories + #self.dispogruppe_neu_combo['values'] = categories self.dispogruppe_neu_combo['state'] = 'readonly' self.dispogruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispogruppe_neu', self.dispogruppe_neu.get())) self.dispogruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -781,7 +782,7 @@ class RightFrameTOSGruppe(AllFrames): self.dispolaufgruppe_neu = tk.StringVar() self.dispolaufgruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispolaufgruppe_neu) - self.dispolaufgruppe_neu_combo['values'] = categories + #self.dispolaufgruppe_neu_combo['values'] = categories self.dispolaufgruppe_neu_combo['state'] = 'readonly' self.dispolaufgruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispolaufgruppe_neu', self.dispolaufgruppe_neu.get())) self.dispolaufgruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -819,7 +820,7 @@ class RightFrameTOSGruppe(AllFrames): self.hersteller_neu = tk.StringVar() self.hersteller_neu_combo = ttk.Combobox(frame, textvariable=self.hersteller_neu) - self.hersteller_neu_combo['values'] = categories + #self.hersteller_neu_combo['values'] = categories self.hersteller_neu_combo['state'] = 'readonly' self.hersteller_neu_combo.bind('<>', lambda event:self.callback('cb_hersteller_neu', self.hersteller_neu.get())) self.hersteller_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) @@ -1032,7 +1033,7 @@ class RightFrameVersion(AllFrames): self.rownum = AllFrames.get_rows(self) col_left = 0 - categories = configs.Allgemein.get_options("Kategorien") + #categories = configs.Allgemein.get_options("Kategorien") # Version version_label = ttk.Label(frame, text="Version:" )