From dd20c428514fd727fc240d2eb096860c6517352a Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 12 Mar 2024 14:57:47 +0100 Subject: [PATCH] =?UTF-8?q?Logik=20f=C3=BCr=20Freigabevermerk=20und=20ZUsa?= =?UTF-8?q?tzinfos=20implementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/caditem.py | 146 +++++++++++++++++++++++++++++++++++++--------- lib/controller.py | 28 ++++----- 2 files changed, 134 insertions(+), 40 deletions(-) diff --git a/lib/caditem.py b/lib/caditem.py index 97776b5..42197df 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -185,6 +185,7 @@ class CadItem(DataModel): self._read_only_items = {} if self._logic: self._logic.clear_states() + self._logic.clear_configurations() def add_logic(self, logic): self._logic = logic @@ -281,19 +282,42 @@ class CadItem(DataModel): def get_all_gui_data(self): return self._gui_data - def _transform_content_from_csv(self, translated_data): + def _transform_content_from_csv(self, translated_data, author=None): + """"baut die Texte aus der csv Datei nach dem Einladen um""" + # Änderungstext sollte Author enthalten wenn einer gegeben ist + if 'aenderungstext_sivas' in translated_data: + text= translated_data["aenderungstext_sivas"] + text_neu = None + # semikolon müssen rausfliegen + if re.search(';', text): + 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) + else: + text_neu = '{aenderungstext} (von {author})'.format(aenderungstext=text, author=author) + if text_neu: + translated_data["aenderungstext_neu"] = text_neu + else: + pass + else: + default = "Erstanlage" + if author: + default = 'Erstanlage (von {author})'.format(author=author) + translated_data["aenderungstext_neu"] = default + # Spezial: Abkürzungen .kpl rausschmeissen. Text eventuell kürzen if "bezeichnung1_sivas" in translated_data: text = translated_data["bezeichnung1_sivas"] - translated_data["bezeichnung1_sivas"] = re.sub(r"\s+kpl[.|\s]", "", text, flags=re.I) + translated_data["bezeichnung1_neu"] = re.sub(r"\s+kpl[.|\s]", "", text, flags=re.I) # Spezial Halbzeug ohne Sägeliste if "halbzeugOhneSaege_sivas" in translated_data: text = translated_data["halbzeugOhneSaege_sivas"] if text =="N": - translated_data["halbzeugOhneSaege_sivas"] = "Sägeliste benötigt" + translated_data["halbzeugOhneSaege_neu"] = "Sägeliste benötigt" else: - translated_data["halbzeugOhneSaege_sivas"] = "Sägeliste nicht benötigt" + translated_data["halbzeugOhneSaege_neu"] = "Sägeliste nicht benötigt" # Spezial Beschaffungsart if "beschaffungsart_sivas" in translated_data: @@ -311,13 +335,23 @@ class CadItem(DataModel): # Spezial Freigabevermerk if "freigabevermerk_sivas" in translated_data: text = translated_data["freigabevermerk_sivas"] - translated_data["freigabevermerk_sivas"] = re.sub(r";", " /", text, flags=re.I) - + if re.search(';', text): + 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: text = translated_data["hersteller_sivas"] - translated_data["hersteller_sivas"] = re.sub(r"^.*-\s+", "", text, flags=re.I) - + if re.search(r"^.*-\s+", text): + translated_data["hersteller_neu"] = re.sub(r"^.*-\s+", "", text, flags=re.I) + + # Spezial Änderungsindex + if "aenderungsindex_sivas" not in translated_data: + translated_data["aenderungsindex_neu"] = 'A' + elif "aenderungsindex_sivas" in translated_data: + text = translated_data["aenderungsindex_sivas"] + if text.islower(): + translated_data["aenderungsindex_neu"] = text.upper() + return translated_data @@ -328,21 +362,12 @@ class CadItem(DataModel): translated_data[self.excel_to_gui[k]] = v # Spezial: Befüllung von Änderungstext mit dem Author, falls in der .csv vorhanden + # Indexerfasser wird nicht in der gui verwaltet. Deshalb Modifikation aus den Rohdaten + author = None if "Indexerfasser" in data: author = data["Indexerfasser"] - if "Aenderungstext" in data: - if author: - translated_data["aenderungstext_sivas"] = '{aenderungstext} (von {author})'.format(aenderungstext=data["Aenderungstext"], author=author) - # Indexerfasser wird nicht in der gui verwaltet. Deshalb Modifikation aus den Rohdate - else: - translated_data["aenderungstext_sivas"] = data["Aenderungstext"] - else: - default = "Erstanlage" - if author: - default = 'Erstanlage (von {author})'.format(author=author) - translated_data["aenderungstext_sivas"] = default - translated_data = self._transform_content_from_csv(translated_data) + translated_data = self._transform_content_from_csv(translated_data, author) return translated_data def get_child_of_id(self, sivasId): @@ -598,7 +623,7 @@ class GuiLogic(): # hier holt man die Daten der Configs self._config = configs # hier werden die Zustände gespeichert - self._states = dict() + self._states = dict() # comboboxen disabled/enabled def clear_states(self): self._states = dict() @@ -607,6 +632,7 @@ class GuiLogic(): def set_state(self, key, val): """ merkt sich den status wie 'readonly' etc für dieses item in der GUI""" self._states[key] = val + def set_gui_defaults(self): # set defaults from given logic @@ -680,6 +706,10 @@ class GuiLogic(): ret = self.cb_halbzeugnummer(value) elif key == 'cb_halbzeuglaenge': ret = self.cb_halbzeuglaenge(value) + elif key == 'cb_freigabevermerk': + ret = self.cb_freigabevermerk(value) + elif key == 'cb_zusatzinfos_auto_text': + ret = self.cb_zusatzinfos_auto_text(value) else: raise Exception("this callback does not exist "+key) return ret @@ -693,7 +723,7 @@ class GuiLogic(): 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', - 'cb_werkstofftyp_neu', 'cb_material_neu', 'cb_oberflaeche_neu', 'cb_farbe_neu', 'cb_herstteilenr_neu'] + 'cb_werkstofftyp_neu', 'cb_material_neu', 'cb_oberflaeche_neu', 'cb_farbe_neu', 'cb_herstteilenr_neu', 'cb_freigabevermerk'] elif key == 'cb_neuaufbau': ret = [] elif key == 'cb_aus_halbzeug_neu': @@ -709,9 +739,11 @@ class GuiLogic(): elif key == 'cb_halbzeugOhneSaege_neu': ret = [] elif key == 'cb_ruestcode_neu': - ret = [ 'cb_halbzeugOhneSaege_neu', 'cb_mengeneinheit_neu', 'cb_halbzeug_neu'] + ret = [ 'cb_halbzeugOhneSaege_neu', 'cb_mengeneinheit_neu', 'cb_halbzeug_neu', 'cb_zusatzinfos_auto_text'] elif key == 'cb_fertigungsart_neu': ret = ['cb_allgemeintoleranz_neu'] + elif key == 'cb_allgemeintoleranz_neu': + ret = [] elif key == 'cb_fosGruppe_neu': ret = [] elif key == 'cb_kalkulationsart_neu': @@ -729,7 +761,7 @@ class GuiLogic(): elif key == 'cb_hersteller_neu': ret = [] elif key == 'cb_werkstoffdiskrepanz': - ret = [] + ret = ['cb_zusatzinfos_auto_text'] elif key == 'cb_werkstofftyp_neu': ret = ['cb_material_neu'] elif key == 'cb_material_neu': @@ -751,6 +783,10 @@ class GuiLogic(): ret = [] elif key == 'cb_3dsuchen': ret = [] + elif key == 'cb_freigabevermerk': + ret = [] + elif key == 'cb_zusatzinfos_auto_text': + ret = [] else: raise Exception("this callback does not exist "+key) return ret @@ -842,7 +878,6 @@ class GuiLogic(): else: self.set_state('halbzeuglaenge_neu', 'disabled') - def cb_halbzeugoberflaeche(self, selected): ret = dict() aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu") @@ -1308,7 +1343,7 @@ class GuiLogic(): def cb_halbzeug_neu(self, selected): ret = dict() - pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu") + rcode = self._model.get_gui_data("ruestcode_sivas") halbzeug = self._model.get_gui_data("halbzeug_sivas") @@ -1616,6 +1651,65 @@ class GuiLogic(): return ret + def cb_freigabevermerk(self, selected): + ret = dict() + 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") + + if selected is None: + # Default Vorbelegung + default = '' + if freigabe_sivas is None: + if pdm_kategorie_neu == "Kaufteil": + pass + else: + if re.findall(r'(\d{6})', version_sivas): + default = 'Anpassung an neues Indexsystem, Zeichnung mit Versionsnummer {version} weiterhin gültig'.format(version=version_sivas) + else: + pass + ret['freigabevermerk_neu'] = default + else: + ret['freigabevermerk_neu'] = selected + return ret + + def cb_zusatzinfos_auto_text(self, selected): + 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_sivas = self._model.get_gui_data("werkstoffdiskr_sivas") + + if selected is None: + text = '' + blacklist = self._config.get_blacklist() + if aenderungsindex_sivas.islower() : + if truemmer == 'J' or ruestcode == '': + 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_sivas == True: + text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeWerkstoffdiskrepanz') + else: + text = self._config.Zusatz.get('EinzelTextblöcke', 'Kleinbuchstabe') + elif truemmer == 'J' or ruestcode == '': + if teilenummer in blacklist: + text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerBlacklist') + elif werkstoffdiskr_sivas == True: + text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerWerkstoffdiskrepanz') + else: + text = self._config.Zusatz.get('EinzelTextblöcke', 'Truemmer') + + ret['zusatzinfos_auto_text'] = text + else: + ret['zusatzinfos_auto_text'] = selected + return ret + + if __name__ == "__main__": pass diff --git a/lib/controller.py b/lib/controller.py index cf907d1..cbb1a6f 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -143,7 +143,6 @@ class Controller(Observer): def get_current_item_id(self): return self._model.get_current_item_id() - 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 @@ -202,10 +201,8 @@ class Controller(Observer): def get_gui_states(self): return self._model.get_states() - - def set_widget_status(self, widgetname, status): - #self._view.set_widget_status(widgetname, status) - pass + def get_configuration(self): + return self._model.get_configuration() def message_info(self, title, key, questions='ok'): return messagebox.showinfo(title, messages[key]) @@ -254,15 +251,18 @@ class Controller(Observer): self._model.check() def zuruecksetzen(self): - cid = self.get_current_item_id() - self._model.clear() - self._view.clear_rightframes() - csv_data = self._model.sivas_data_from_csv(str(cid)) - # transform the csv keys into keys used behind the gui - gui_data = self._model.csv2guidata(csv_data) - self.set_gui_dict(gui_data) - # create dropdown and other defaults - self._model.set_gui_defaults() + data = dict() + data['halbzeugnummer_neu'] = {'background':'red', 'foreground':'white'} + self._view.configure(data) + # cid = self.get_current_item_id() + # self._model.clear() + # self._view.clear_rightframes() + # csv_data = self._model.sivas_data_from_csv(str(cid)) + # # transform the csv keys into keys used behind the gui + # gui_data = self._model.csv2guidata(csv_data) + # self.set_gui_dict(gui_data) + # # create dropdown and other defaults + # self._model.set_gui_defaults() def suche_3d(self): pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")