Logik des Feldes 'Zusatzinformationen automatisch' überarbeitet. Konkret wurde die Erkennung der Fälle überarbeitet, bei denen Zusatzinformationen ausgegeben werden sollen. Es wird nun zunächst geprüft, ob die verschiedenen Einzelfälle, z.B. ob es sich um eine Trümmerbaugruppe handelt, auf die zu migrierende Nummer zutreffen. Ist dies der Fall wird der 'Treffer' gesammelt. Am Ende werden alle Treffer miteinander zu einem String kombiniert. Dieser kombinierte String wird anschließend in der 'Zusatzinformationen.cfg' gesucht. Bei Übereinstimmung wird der zugehörige Text aus der 'Zusatzinformationen.cfg' in das GUI-Textfeld geschrieben. Die Überarbeitung wurde durchgeführt, weil es immer mehr Fälle wurden und es mit der bisherigen Logik unübersichtlich wurde, wo der neue Fall eingefügt werden soll. Zudem entstanden Redundanzen. Die neue Logik sollte deutlich dynamischer, wartbarer und einfacher erweiterbar als die bisherige Variante sein. Es muss jedoch in der Zusatzinformationen.cfg darauf geachtet werden, dass die Optionen korrekt geschrieben werden, da das Programm sonst keine Übereinstimmung finden kann

This commit is contained in:
2025-07-11 22:28:54 +02:00
parent 95fb80dd57
commit cf4b632cba
3 changed files with 58 additions and 40 deletions
+45 -31
View File
@@ -242,6 +242,7 @@ class CadItem(DataModel):
self._read_only_items = {}
self._controller = None
self._logic = None
self._has_bom = None
def clear(self):
asm_id = self.get_asm_id() # das einzige was beim Löschen des Modells bleiben sollte, ist die übergeordnete Baugruppennummer
@@ -294,6 +295,14 @@ class CadItem(DataModel):
raise ValueError(f"Property '{property_name}' doesn't exist in BOM! Check property spelling!")
else:
return self._bom_properties[property_name]
def set_bom_existence(self, bom_status: bool) -> bool:
self._has_bom = bom_status
def has_bom(self) -> bool:
return self._has_bom
# Methoden um die Verwendbarkeit einzelner Schalter auszugrauen
def set_read_only_dict(self, data:dict):
@@ -2536,53 +2545,58 @@ class GuiLogic():
return ret
def cb_zusatzinfos_auto_text(self, selected):
ret = dict()
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_neu = self._model.get_gui_data("werkstoffdiskr_neu")
aus_halbzeug_neu = self._model.get_gui_data("aus_halbzeug_neu")
aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu")
bom_exists = self._model.has_bom()
beistellungen = False
dispoinaktiv = False
if bom_exists:
beistellungen = "True" in self._model.get_bom_properties("Lieferantenbeistellung").values()
dispoinaktiv = "False" in self._model.get_bom_properties("Dispoaktiv").values()
# Liest Optionsnamen aus 'Zusatzinformationen.cfg'
cfg_single_options = dict.fromkeys(self._config.Zusatz.get_section_options("EinzelTextblöcke"), "EinzelTextblöcke")
cfg_combo_options = dict.fromkeys(self._config.Zusatz.get_section_options("ComboTextblöcke"), "ComboTextblöcke")
all_cfg_options = cfg_single_options | cfg_combo_options
if selected is None:
text = ''
try:
blacklist = self._config.get_blacklist()
self._config.get_blacklist()
except:
self._model.message_error('Blacklist nicht vorhanden', 'blacklist_not_exist')
return {}
# Prüft, ob einer der nachfolgenden Fälle auf die Teilenummer zutrifft, die im Moment migriert wird
matches = []
if aenderungsindex_sivas and aenderungsindex_sivas.islower():
if truemmer == 'J' or ruestcode is None:
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_neu == True:
text = self._config.Zusatz.get('ComboTextblöcke', 'KleinbuchstabeWerkstoffdiskrepanz')
matches.append("Kleinbuchstabe")
if truemmer == 'J' or ruestcode is None:
matches.append("Truemmer")
if werkstoffdiskr_neu:
matches.append("Werkstoffdiskrepanz")
if dispoinaktiv:
matches.append("Dispoinaktiv")
if beistellungen:
if aus_halbzeug:
matches.append("BlacklistHZ")
else:
text = self._config.Zusatz.get('EinzelTextblöcke', 'Kleinbuchstabe')
text = text.format(aenderungsindex=aenderungsindex_sivas)
elif truemmer == 'J' or ruestcode is None:
if teilenummer in blacklist:
text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerBlacklist')
elif werkstoffdiskr_neu == True:
text = self._config.Zusatz.get('ComboTextblöcke', 'TruemmerWerkstoffdiskrepanz')
else:
text = self._config.Zusatz.get('EinzelTextblöcke', 'Truemmer')
elif teilenummer in blacklist:
if aus_halbzeug_neu:
text = self._config.Zusatz.get('EinzelTextblöcke', 'BlacklistHZ')
else:
text = self._config.Zusatz.get('EinzelTextblöcke', 'BlacklistBG')
elif werkstoffdiskr_neu == True:
text = self._config.Zusatz.get('EinzelTextblöcke', 'Werkstoffdiskrepanz')
else:
pass
matches.append("BlacklistBG")
# Sucht sich die zutreffende Option aus der "Zusatzinformationen.cfg", die mit den gefundenen Fällen übereinstimmen
# heraus und gibt den Optionstext zurück. Bei fehlender Übereinstimmung wird kein Text geschrieben
if len(matches) > 0:
match_len = len("".join(matches))
for option in all_cfg_options:
if all(match in option for match in matches) and len(option) == match_len:
text = self._config.Zusatz.get(all_cfg_options[option], option)
break
ret['zusatzinfos_auto_text'] = text
else: