From 83a250e66b63cb9e0267356312697dcf6f9ea9ef Mon Sep 17 00:00:00 2001 From: mistangl Date: Tue, 19 Mar 2024 13:17:31 +0100 Subject: [PATCH] Statistik in den tree eingebaut. Ein paar Fixes in der Logik. Erweiterungen des --- lib/caditem.py | 129 +++++++++++++++++++++++++++++++++++++++++-------- lib/gui.py | 24 ++++++++- 2 files changed, 132 insertions(+), 21 deletions(-) diff --git a/lib/caditem.py b/lib/caditem.py index 048e7c4..4e22416 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -398,8 +398,6 @@ class CadItem(DataModel): else: translated_data["tosgruppe_neu"] = default - - # Spezial Freigabevermerk if "freigabevermerk_sivas" in translated_data: text = translated_data["freigabevermerk_sivas"] @@ -409,8 +407,8 @@ class CadItem(DataModel): # Spezial Hersteller: aus "80312 - Rehau AG & Co." wird "Rehau AG & Co." if "hersteller_sivas" in translated_data: text = translated_data["hersteller_sivas"] - if re.search(r"^.*-\s+", text): - translated_data["hersteller_neu"] = re.sub(r"^.*-\s+", "", text, flags=re.I) + if re.search(r"^\d+\s+-\s+", text): + translated_data["hersteller_sivas"] = re.sub(r"^\d+\s+-\s+", "", text, flags=re.I) # Spezial Änderungsindex if "aenderungsindex_sivas" not in translated_data: @@ -573,7 +571,8 @@ class CadItem(DataModel): def check_pflichtfelder(self): """Allgemeine Prüfungen: - Solange nicht alle Pflichtfelder einen Wert aufweisen, muss beim Klick auf den Button "Migrieren" eine ERROR-Messagebox erscheinen, in der alle Pflichtfelder aufgelistet sind, die keinen Wert aufweisen + Solange nicht alle Pflichtfelder einen Wert aufweisen, muss beim Klick auf den Button "Migrieren" eine ERROR-Messagebox + erscheinen, in der alle Pflichtfelder aufgelistet sind, die keinen Wert aufweisen """ missing = list() @@ -607,9 +606,10 @@ class CadItem(DataModel): if pdm_kategorie_neu == "Einzelteil" or pdm_kategorie_neu == "Schweissbaugruppe": self.check_key_both_columns("fertigungsart_sivas", "fertigungsart_neu", missing) - # Allgemeintoleranz - self.check_key_both_columns("allgemeintoleranz_sivas", "allgemeintoleranz_neu", missing) + if pdm_kategorie_neu == "Einzelteil" or pdm_kategorie_neu == "Schweissbaugruppe": + self.check_key_both_columns("allgemeintoleranz_sivas", "allgemeintoleranz_neu", missing) + # FOS-Gruppe self.check_key_both_columns("fosGruppe_sivas", "fosGruppe_neu", missing) # Kalkulationsart @@ -629,7 +629,7 @@ class CadItem(DataModel): # Werkstofftyp aus_halbzeug = self.get_gui_data("aus_halbzeug_neu") - if aus_halbzeug is False: + if pdm_kategorie_neu == "Einzelteil" and aus_halbzeug is False: self.check_key_existence("werkstofftyp_neu", missing) # Änderungstext @@ -647,6 +647,8 @@ class CadItem(DataModel): """ überprüft ob inder Oberfläche nicht erlaubte Zeichen eingetragen wurden""" wrongchars = dict() for key in self.key2label: + if key == "model3d_neu": # 3D Teil Pfad ausnehmen + continue content = self.get_gui_data(key) for c in invalid_chars: if c in content: @@ -763,7 +765,7 @@ class CadItem(DataModel): return False # TOS-Gruppe - tosgruppe = self.get_content('tosgruppe_sivas', 'tosgruppe_sivas') + tosgruppe = self.get_content('tosgruppe_sivas', 'tosgruppe_neu') (num2refId, num2child) = self._controller.get_config().TOSGruppen.get_Id2TosGroup() # TODO wirklich als refernce-id oder als Gruppe? if tosgruppe not in num2child.keys(): @@ -912,6 +914,12 @@ class CadItem(DataModel): "Subject": "-", "Category": "-", "Keywords": "-", + "Aus Halbzeug": "", + "HalbzeugIntern":"", + "Kopiertes_Teil_1_y_Skalierung": "", + "Oberflaechenbehandlung":"", + "Farbe": "", + } all_data = self.get_all_gui_data() # data_keys = [ "Author", "Teilenummer", "StartRevision", @@ -926,16 +934,80 @@ class CadItem(DataModel): # "Tolerierungsnorm","Änderungsbeschreibung", # "Freigabevermerk", "ZusaetzlicheInformationen"] # Path + + + # "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", + teilenummer = self.get_gui_data("teilenummer") data["Teilenummer"] = teilenummer - # Bezeichnung um "- BG" ergänzen pdm_kategorie_neu = self.get_gui_data("pdm_kategorie_neu") bezeichnung1 = self.get_content('bezeichnung1_sivas', 'bezeichnung1_neu') title = bezeichnung1 + data["KategorieNE"] = title + # Bezeichnung um "- BG" ergänzen if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe": title = bezeichnung1 + " - BG" data["Title"] = title + + # aus Halbzeug + aus_halbzeug = self.get_gui_data("aus_halbzeug_neu") + if aus_halbzeug: + data["Aus Halbzeug"] = "Ja" + + + # Halbzeugnummer + halbzeugnummer = self.get_gui_data("halbzeugnummer_neu") + if halbzeugnummer: + data["HalbzeugIntern"] = halbzeugnummer + + # Halbzeuglänge + halbzeuglaenge = self.get_gui_data("halbzeuglaenge_neu") + if halbzeuglaenge: + data["Kopiertes_Teil_1_y_Skalierung"] = halbzeuglaenge + + # Halbzeugoberfläche + halbzeugoberflaeche = self.get_gui_data("halbzeugoberflaeche_neu") + if halbzeuglaenge: + data["Oberflaechenbehandlung"] = halbzeugoberflaeche + + # Halbzeugfarbe + farbe = self.get_gui_data("halbzeugoberflaeche_neu") + if halbzeuglaenge: + data["Farbe"] = farbe + # Bezeichnung 4 bezeichnung4 = "" @@ -950,13 +1022,7 @@ class CadItem(DataModel): # Startrevision startrevision = self.get_content('aenderungsindex_sivas', 'aenderungsindex_neu') data["StartRevision"] = startrevision - - # aus Halbzeug - aus_halbzeug = self.get_gui_data("aus_halbzeug_neu") - if aus_halbzeug: - data["Aus Halbzeug"] = "Ja" - else: - data["Aus Halbzeug"] = "" + # Fertigungsart fertigungsart = self.get_content('fertigungsart_sivas', 'fertigungsart_neu') @@ -976,7 +1042,10 @@ class CadItem(DataModel): "ST - stanzen":"stanzen", "SW - schweißen":"schweißen", } - data["Fertigungsart"] = trans[fertigungsart] + if fertigungsart is not None: + data["Fertigungsart"] = trans[fertigungsart] + else: + data["Fertigungsart"] = "" # FOS Gruppe fos_gruppe = self.get_content('fosGruppe_sivas', 'fosGruppe_neu') @@ -1038,6 +1107,16 @@ class CadItem(DataModel): data["Dispogruppe"] = trans[dispogruppe] + + # # Hersteller + # hersteller = self.get_content('hersteller_sivas', 'hersteller_neu') + # data['Hersteller'] = hersteller + + # # HerstellerTeilenummer + # herstellertnr = self.get_content('herstteilenr_sivas', 'herstteilenr_neu') + # data['HerstellerTeilenummer'] = herstellertnr + + # Dispolaufgruppe dispolaufgruppe = self.get_content('dispolaufgruppe_sivas', 'dispolaufgruppe_neu') trans = { @@ -1552,11 +1631,14 @@ class GuiLogic(): ret = dict() pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu") + + # status setzen if pdm_kategorie_neu == "Kaufteil" or pdm_kategorie_neu == "Schweissbaugruppe": self.set_state('cb_fertigungsart_neu', 'disabled') else: self.set_state('cb_fertigungsart_neu', 'readonly') + # Werte der Combobox setzen if pdm_kategorie_neu == "Baugruppe": cblist = self._config.Fertigung.get_list_in_section("FertigungsartenBaugruppe") ret['cb_fertigungsart_neu'] = cblist @@ -1567,8 +1649,15 @@ class GuiLogic(): else: ret['cb_fertigungsart_neu'] = '' + # default setzen if selected is None: ret['fertigungsart_neu'] = '' + fertigung_sivas = self._model.get_gui_data("fertigungsart_sivas") + if pdm_kategorie_neu == "Schweissbaugruppe": + if fertigung_sivas == "": + ret['fertigungsart_neu'] = 'SW - schweißen' + elif fertigung_sivas != "schweißen": + ret['fertigungsart_neu'] = 'SW - schweißen' else: ret['fertigungsart_neu'] = selected return ret @@ -1682,10 +1771,10 @@ class GuiLogic(): fos_gruppe = self._model.get_gui_data("fosGruppe_sivas") ret['fosGruppe_neu'] = '' - self.set_state('cb_fosGruppe_neu', 'readonly') + self.set_state('cb_fosGruppe_neu', 'disabled') if pdm_kategorie_neu == "Kaufteil": cblist = self._config.Allgemein.get_options("FOS_Gruppe") - self.set_state('cb_fosGruppe_neu', 'disabled') + self.set_state('cb_fosGruppe_neu', 'readonly') elif pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe": cblist = ['1 - Baugruppe'] elif pdm_kategorie_neu == "Einzelteil": diff --git a/lib/gui.py b/lib/gui.py index 6ead35b..705bf02 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -57,7 +57,7 @@ class TreeView(): # hier Anzahl der sichtbaren Zeilen des Baums angeben: self.tree = ttk.Treeview(frame, height=65) # TODO hier anstatt root die Statistik rein schreiben. - self.tree.heading('#0', text='root', anchor=tk.W) + #self.tree.heading('#0', text='root', anchor=tk.W) self.tree.grid(row=nrow, column=0, sticky=tk.NSEW) # add a scrollbar @@ -69,12 +69,33 @@ class TreeView(): self.tree.bind('', self.item_selected) # Doppelklick: self.trid2sivasId = dict() + + def set_heading_text(self, parent_children_mapping, red_ids): + done_items = set() + undone_items = set() + for parent,children in parent_children_mapping.items(): + if parent in red_ids: + undone_items.add(parent) + else: + done_items.add(parent) + for c in children: + if c in red_ids: + undone_items.add(c) + else: + done_items.add(c) + num_done = len(done_items) + num_undone = len(undone_items) + percentage = round(num_done / (num_done + num_undone) * 100, 1) + heading = "{percent}% ({done} ✔, {undone} ☐)".format(percent=percentage, done=num_done, undone=num_undone) + self.tree.heading('#0', text=heading, anchor=tk.W) + def set_controller(self, controller): self._controller = controller def refresh(self, parent_children_mapping, red_ids, orange_ids): self.clear() + self.set_heading_text(parent_children_mapping, red_ids) self.create(parent_children_mapping, red_ids, orange_ids) def clear(self): @@ -90,6 +111,7 @@ class TreeView(): def create(self, parent_children_mapping, red_ids, orange_ids): pool = dict() + self.set_heading_text(parent_children_mapping, red_ids) for parent, children in parent_children_mapping.items(): # parent erzeugen, falls es diese nicht schon gibt (check der pool ids) if parent not in pool: