diff --git a/cfg/Zusatzinformationen.cfg b/cfg/Zusatzinformationen.cfg index 9230d62..860e6f2 100644 --- a/cfg/Zusatzinformationen.cfg +++ b/cfg/Zusatzinformationen.cfg @@ -8,10 +8,10 @@ Dispoinaktiv=ACHTUNG BG mit dispoinaktiven Stücklistenpositionen. Es wird keine [ComboTextblöcke] KleinbuchstabeTruemmer=ACHTUNG Index in Sivas mit Kleinbuchstaben + Trümmerbaugruppe. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien -KleinbuchstabeBlacklist=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien +KleinbuchstabeBlacklistBG=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien KleinbuchstabeWerkstoffdiskrepanz=ACHTUNG Index in Sivas mit Kleinbuchstaben + Materialdiskrepanz. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien KleinbuchstabeDispoinaktiv=ACHTUNG Index in Sivas mit Kleinbuchstaben + BG mit Dispoinaktiven Stücklistenpositionen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien -TruemmerBlacklist=ACHTUNG Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien +TruemmerBlacklistBG=ACHTUNG Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien TruemmerWerkstoffdiskrepanz=ACHTUNG Trümmerbaugruppe + Materialdiskrepanz. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien TruemmerDispoinaktiv=ACHTUNG Trümmerbaugruppe + BG mit dispoinaktiven Stücklistenpositionen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien KleinbuchstabeTruemmerBlacklist=ACHTUNG Index in Sivas mit Kleinbuchstaben + Trümmerbaugruppe + BG mit Beistellungen. Ausführliche Informationen zu erforderlichen Tätigkeiten / potentiellen Fehlern vgl. Konstruktionsrichtlinien @@ -20,8 +20,8 @@ BlacklistHZDispoinaktiv=ACHTUNG Bearbeitetes Halbzeug mit beigestellten und disp BlacklistBGDispoinaktiv=ACHTUNG BG mit beigestellten und dispoinaktiven Stücklistenpositionen. Es wird keine Stückliste übergeben. Diese muss bei einer Änderung händisch angelegt und archiviert werden. Hierfür die Verantwortlichen für den Teilestamm informieren. ;Nachfolgende Kombinationen können nicht auftreten: -;- BlacklistWerkstoffdiskrepanz +;- BlacklistBGWerkstoffdiskrepanz ;- KleinbuchstabeTruemmerWerkstoffdiskrepanz -;- KleinbuchstabeBlacklistWerkstoffdiskrepanz -;- TruemmerBlacklistWerkstoffdiskrepanz= -;- KleinbuchstabeTruemmerBlacklistWerkstoffdiskrepanz= +;- KleinbuchstabeBlacklistBGWerkstoffdiskrepanz +;- TruemmerBlacklistBGWerkstoffdiskrepanz +;- KleinbuchstabeTruemmerBlacklistBGWerkstoffdiskrepanz diff --git a/lib/caditem.py b/lib/caditem.py index 372adc7..4bc410d 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -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: diff --git a/lib/controller.py b/lib/controller.py index ba517f6..4cad091 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -121,9 +121,12 @@ class Controller(Observer): data_dir = self.get_env("data") rd_dbase_filename = self.get_env("rd_dbase_filename") - excluded_bom_ids = self._config.bom_config.get_excluded_ids("ExcludedPartnumbersInBOM") + excluded_bom_ids = self._config.bom_config.get_excluded_ids("ExcludedPartnumbersInBOM") # Artikelnummern wie z.B. "MA0000006" sollen nicht im Baum dargestellt werden sivas_bom = SivasBOM(asm_id, data_dir, asm_id + '.json', load_local_bom, excluded_bom_ids) + + bom_existence = False if not sivas_bom.bom_data else True + sivas_bom.extend_asm_bom(asm_id, {"Parent": None, "Position": "10/0"}) # Ergänzt Stücklistendaten um eine fiktive Baugruppe "None", in der die Haupt-Teilenummer als Pos. 1 vorliegt. Dadurch können auch Teilenummern ohne Stückliste korrekt abgebildet werden rd_data = RuleDesignerDatabaseConfig(data_dir, rd_dbase_filename, load_local_rd_ids) @@ -137,6 +140,7 @@ class Controller(Observer): self._model.set_red_ids(pending_ids) self._model.set_parent_children(sivas_bom.parent_children) self._model.set_asm_id(asm_id) + self._model.set_bom_existence(bom_existence) self._model.set_bom_properties(sivas_bom.all_bom_properties) def set_model(self, model): @@ -184,8 +188,8 @@ class Controller(Observer): # falls eine .json Datei davon im Work Ordner existiert, dann diese zuerst versuchen ins Modell zu laden self._view.clear_rightframes() self._model.clear() - isok = self._model.from_json_file(self.get_env("out"), cid) - if isok == False: + saved_json_exists = self._model.from_json_file(self.get_env("out"), cid) + if saved_json_exists == False: # ansonsten die .csv Datei mit den SIVAS Infos aus data holen loaded = self._model.sivas_data_from_csv(cid) if loaded == None: