From a785eecbc290dab8d5c701653cfe50f3a1b0fe61 Mon Sep 17 00:00:00 2001 From: mistangl Date: Thu, 14 Mar 2024 14:24:37 +0100 Subject: [PATCH] Alle Check Logiken Implementiert --- lib/caditem.py | 205 ++++++++++++++++++++++++++++-------------- lib/controller.py | 24 +++-- lib/manage_configs.py | 19 ++++ 3 files changed, 177 insertions(+), 71 deletions(-) diff --git a/lib/caditem.py b/lib/caditem.py index e99bb6f..d6b8d49 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -553,10 +553,11 @@ class CadItem(DataModel): def message_info(self, title, key, questions='ok'): return self._controller.message_info(title, key, questions) - - def message_error(self, title, key): - return self._controller.message_error(title, key) - + def message_error(self, title, key, values=None): + return self._controller.message_error(title, key, values) + def message_question(self, title, key, values=None): + return self._controller.message_question(title, key, values) + def check_key_existence(self, key, missing): if not self.get_gui_data(key): missing.append(self.key2label[key]) @@ -664,94 +665,168 @@ class CadItem(DataModel): return self.get_gui_data(key_sivas) return None - # "asm_id", - # "teilenummer", - # "datenbank", - # "pdm_kategorie_neu", - # "neuaufbau", - # "aus_halbzeug_neu", - # "halbzeugnummer_neu", - # "halbzeuglaenge_neu", - # "halbzeugoberflaeche_neu", - # "halbzeugfarbe_neu", - # "lebenszyklus_status_neu", - # "model3d_neu", - # "bezeichnung1_sivas", "bezeichnung1_neu", - # "bezeichnung2_sivas", - # "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_neu", - # "werkstofftyp_neu", - # "material_sivas", "material_neu", - # "oberflaeche_neu", - # "farbe_neu", - # "version_sivas", - # "aenderungsindex_sivas", "aenderungsindex_neu", - # "aenderungstext_sivas", "aenderungstext_neu", - # "freigabevermerk_sivas", "freigabevermerk_neu", - # "zusatzinfos_auto_text", - # "zusatzinfos_bendef_text", + def check_content(self): content = self.get_content('bezeichnung1_sivas', 'bezeichnung1_neu') if len(content) > 50: - self.message_info('Bezeichnung1 zu gross', 'bezeichnung_zu_gross') - return + self.message_error('Bezeichnung1 zu gross', 'bezeichnung_zu_gross') + return False # Rüstcode und Sögeliste ruestcode = self.get_gui_data("ruestcode_sivas") halbzeugOhneSaege_neu = self.get_gui_data("halbzeugOhneSaege_neu") if ruestcode == "SRC Standard Rüstcode" and halbzeugOhneSaege_neu == "Sägeliste nicht benötigt": - self.message_info('Konflikt Rüstcode und Sägeliste', 'konflikt_ruestcode_saegeliste') - return + self.message_error('Konflikt Rüstcode und Sägeliste', 'konflikt_ruestcode_saegeliste') + return False # Rüstcode und Kategorie content = self.get_content('ruestcode_sivas', 'ruestcode_neu') pdm_kategorie_neu = self.get_gui_data("pdm_kategorie_neu") if pdm_kategorie_neu != "Baugruppe" and ruestcode == "": - self.message_info('Teilenummer ohne Rüstcode', 'teilenummer_ohne_ruestcode') - return + self.message_error('Teilenummer ohne Rüstcode', 'teilenummer_ohne_ruestcode') + return False # Fertigungsart fertigungsart = self.get_content('fertigungsart_sivas', 'fertigungsart_neu') arten = ["3D - 3D-drucken", "EX - extrudieren", "GI - gießen", "PR - verpressen", "SN - strangpressen", "SP - spritzgießen", "SW - schweißen"] if pdm_kategorie_neu == "Baugruppe" and fertigungsart == arten: - self.message_info('Fertigunsart falsch', 'fertigungsart') - return - farten = self._config.Fertigung.get_list_in_section("Fertigungsarten") + self.message_error('Fertigunsart falsch', 'fertigungsart') + return False + farten = self._controller.get_config().Fertigung.get_list_in_section("Fertigungsarten") if pdm_kategorie_neu == "Kauteil" and fertigungsart == farten: - self.message_info('Fertigunsart falsch', 'fertigungsart') - return + self.message_error('Fertigunsart falsch', 'fertigungsart') + return False if pdm_kategorie_neu == "Schweissbaugruppe" and fertigungsart != "SW - schweißen": - self.message_info('Fertigunsart falsch', 'fertigungsart') - return + self.message_error('Fertigunsart falsch', 'fertigungsart') + return False # FOS - Gruppe fos_gruppe = self.get_content('fosGruppe_sivas', 'fosGruppe_neu') if pdm_kategorie_neu == "Baugruppe" and fos_gruppe == "0 - Einzelteil": - self.message_info('FOS Gruppe falsch', 'fos_gruppe') - return + self.message_error('FOS Gruppe falsch', 'fos_gruppe') + return False if pdm_kategorie_neu == "Einzelteil" and fos_gruppe == "1 - Baugruppe": - self.message_info('FOS Gruppe falsch', 'fos_gruppe') - return - if pdm_kategorie_neu == "SChweissbaugruppe" and fos_gruppe == "1 - Baugruppe": - self.message_info('FOS Gruppe falsch', 'fos_gruppe') - return + self.message_error('FOS Gruppe falsch', 'fos_gruppe') + return False + if pdm_kategorie_neu == "Schweissbaugruppe" and fos_gruppe == "1 - Baugruppe": + self.message_error('FOS Gruppe falsch', 'fos_gruppe') + return False # Kalkulationsart + kalkulationsart = self.get_content('kalkulationsart_sivas', 'kalkulationsart_neu') + if pdm_kategorie_neu == "Kaufteil" and kalkulationsart == "Eigenbau": + self.message_error('Kalkulationsart falsch', 'kalkulations_art') + return False + if pdm_kategorie_neu == "Einzelteil" and kalkulationsart == "Kaufteil": + self.message_error('Kalkulationsart falsch', 'kalkulations_art') + return False + if pdm_kategorie_neu == "Schweissbaugruppe" and kalkulationsart == "Kaufteil": + self.message_error('Kalkulationsart falsch', 'kalkulations_art') + return False + + # Beschaffungsart + beschaffungsart = self.get_content('beschaffungsart_sivas', 'beschaffungsart_neu') + if pdm_kategorie_neu == "Baugruppe" and beschaffungsart == "Kaufteil": + self.message_error('beschaffungsart falsch', 'beschaffungsart') + return False + if pdm_kategorie_neu == "Schweissbaugruppe" and beschaffungsart == "Kaufteil": + self.message_error('beschaffungsart falsch', 'beschaffungsart') + return False + if pdm_kategorie_neu == "Kaufteil" and beschaffungsart == "Eigenbau": + self.message_error('beschaffungsart falsch', 'beschaffungsart') + return False + + # Mengeneinheit + mengeneinheit = self.get_content('mengeneinheit_sivas', 'mengeneinheit_neu') + ruestcode = self.get_content('ruestcode_sivas', 'ruestcode_neu') + if ruestcode == "SRC - Standard Rüstcode" and mengeneinheit != "Stck - Stück": + self.message_error('Mengeneinheit falsch', 'mengeneinheit') + return False + + # Halbzeug + halbzeug = self.get_content('halbzeug_sivas', 'halbzeug_neu') + if ruestcode == "SRC - Standard Rüstcode" and halbzeug == 'WAHR': + self.message_error('Halbzeug falsch', 'teilenummer_halbzeug') + return False + if ruestcode == "Trümmerbaugruppe" and halbzeug == 'WAHR': + self.message_error('Halbzeug falsch', 'teilenummer_halbzeug') + return False + + # TOS-Gruppe + tosgruppe = self.get_content('tosgruppe_sivas', 'tosgruppe_sivas') + (num2refId, num2child) = self._controller.get_config().TOSGruppen.get_Id2TosGroup() + # TODO wirklich als refernce-id oder als Gruppe? + if tosgruppe not in num2child.keys(): + self.message_error('TOS Gruppe nicht vorhanden', 'tos_gruppe_not_exist') + return False + + # Dispogruppe + dispogruppe = self.get_content('dispogruppe_sivas', 'dispogruppe_neu') + if dispogruppe == '': + self.message_error('Dispogruppe nicht angegeben', 'dispo_not_exist') + return False + + # Dispolaufgruppe + dispolaufgruppe = self.get_content('dispolaufgruppe_sivas', 'dispolaufgruppe_sivas') + if dispolaufgruppe == '': + self.message_error('Dispolaufgruppe nicht angegeben', 'dispolauf_not_exist') + return False + + # Ersatz für + ersatzfuer = self.get_content('ersatzfuer_sivas', 'ersatzfuer_neu') + Teilenummern = self._controller.get_config().get_ruledesigner_ids() + if ersatzfuer and ersatzfuer not in Teilenummern: + ret = self.message_question('Ersatz nicht in Teilenummer ', 'teilenummer_not_exist_infos', {'teilenummer':ersatzfuer, 'default':'no' } ) + if ret == "no": + return False + + # Ersetzt durch + ersatzdurch = self.get_content('ersetztdurch_sivas', 'ersetztdurch_neu') + Teilenummern = self._controller.get_config().get_ruledesigner_ids() + if ersatzdurch and ersatzdurch not in Teilenummern: + ret = self.message_question('Ersatz nicht in Teilenummer ', 'ersatzteilenummer_not_exist_infos', {'teilenummer':ersatzdurch, 'default':'no' } ) + if ret == "no": + return False + + # Hersteller + hersteller = self.get_content('hersteller_sivas', 'hersteller_neu') + alleHersteller = self._controller.get_config().Hersteller.get_all() + if hersteller and hersteller not in alleHersteller: + ret = self.message_error('Ersatz nicht in Teilenummer ', 'hersteller', {'hersteller':hersteller } ) + if ret == "no": + return False + + # # Werkstofftyp TODO + # werkstofftyp = self.get_content('werkstofftyp_neu', 'werkstofftyp_neu') + # if werkstofftyp == '': + # self.message_error('Werkstofftyp nicht eingetragen', 'werkstofftyp_not_exist') + # return + + # # Material TODO + # werkstofftyp = self.get_content('werkstofftyp_neu', 'werkstofftyp_neu') + # if werkstofftyp == '': + # self.message_error('Werkstofftyp nicht eingetragen', 'werkstofftyp_not_exist') + # return + + # Farbe + farbe = self._model.get_gui_data("farbe_neu") + if werkstofftyp == '': + self.message_error('Werkstofftyp nicht eingetragen', 'werkstofftyp_not_exist') + return False + + + # Überprüfung ob eine Ergänzung der Angaben zu Material in der Config Datei nötig wäre + aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu") + if pdm_kategorie_neu == "Einzelteil" and aus_halbzeug == False: + mlist = self._controller.get_config().Materialien.get_all_materials() + material_sivas = self._model.get_gui_data("material_sivas") + if material_sivas not in mlist: + self._model.message_info('Materialinformation', 'material_infos') + + return True + + def create_migration_data(self): + pass class CadItemRepository: """ diff --git a/lib/controller.py b/lib/controller.py index 9d8dd80..74ff75a 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -26,9 +26,10 @@ messages = { "tos_gruppe_not_exist":'TOS-Gruppe exisitert nicht. Bitte eingetragene Gruppennummer korrigieren oder ergänzen!', "dispo_not_exist":'Datensatz kann nicht ohne Dispogruppe migriert werden. Bitte nachpflegen!', "dispolauf_not_exist":'Datensatz kann nicht ohne Dispolaufgruppe migriert werden. Bitte nachpflegen!', - "teilenummer_not_exist_infos":'Ersetzte Teilenummer {Ersetzte Teilenummer} exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?', - "ersatzteilenummer_not_exist_infos":'Ersatz-Teilenummer {Ersatz-Teilenummer} exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?', - "werkstofftyp_not_exist":'Eingetragener Werkstofftyp exisitert nicht. Bitte korrigeren!', + "teilenummer_not_exist_infos":"Ersetzte Teilenummer '{teilenummer}' exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?", + "ersatzteilenummer_not_exist_infos":"Ersatz-Teilenummer '{teilenummer}' exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?", + "hersteller": "Hersteller nicht in RuleDesigner enthalten. Bitte nachpflegen!", + "werkstofftyp_not_exist":'Eingetragener Werkstofftyp existieert nicht. Bitte korrigeren!', "werkstoff_not_exist":'Werkstoff falsch. Bitte korrigieren!', "color_not_defined":'Teilenummer kann nicht ohne festgelegte Farbe migriert werden!', "aenderungstext_too_long":'Änderungstext_weist zu viele Zeichen auf. Bitte auf 400 Zeichen verkürzen!', @@ -85,6 +86,8 @@ class Controller(Observer): def set_config(self, config): self._config = config + def get_config(self): + return self._config def get_csv_files_of_asm(self, asmid, uselocal): @@ -211,7 +214,14 @@ class Controller(Observer): def message_info(self, title, key, questions='ok'): return messagebox.showinfo(title, messages[key]) - + def message_question(self, title, key, values): + text = messages[key] + if 'teilenummer' in values: + text = text.format(teilenummer=values['teilenummer']) + default = messagebox.NO + if 'default' in values and values['default'] == 'yes': + default = messagebox.YES + return messagebox.askquestion(title, text, type=messagebox.YESNO, default=default) def message_error(self, title, key, values): text = messages[key] if 'Labels' in values: @@ -270,8 +280,10 @@ class Controller(Observer): # chars = ''.join(achars) # self.message_error('Unzulässige Zeichen', 'unzulaessige_zeichen', {'Zeichentyp': chars, 'Feldname':label}) # return - self._model.check_content() - + ok = self._model.check_content() + if ok == True: + data = self._model.create_migration_data() + def zuruecksetzen(self): cid = self.get_current_item_id() self._model.clear() diff --git a/lib/manage_configs.py b/lib/manage_configs.py index f24081e..16b8c0d 100644 --- a/lib/manage_configs.py +++ b/lib/manage_configs.py @@ -196,6 +196,25 @@ class TOSGroupsConfig(JsonBasedConfig): for cId in childIds: self.get_children_keys(tos_hierarchy, cId, result) + def get_Id2TosGroup(self): + "hole alle ids zur jeweiligen Gruppe" + # lazy. nur einmal laden, wenn noch nicht geschehen + if not self.tos_hierarchy: + self.tos_hierarchy = super().load_json_from_file() + tos_hierarchy = self.tos_hierarchy + + num2refId = dict() + num2child = dict() + allkwds = self.get_all_keywords() + for kw in allkwds.keys(): + refids = tos_hierarchy[kw]["reference-ids"] + for cId in refids.keys(): + num2refId[cId] = refids[cId] + children = tos_hierarchy[kw]["children"] + for cId in children.keys(): + num2child[cId] = children[cId] + return (num2refId, num2child) + def get_all_keywords(self): """hole alle TOS Keywords, welche in der config Datei definiert sind"""