""" Contains the logic for the MVC of CreoMigrate Gui """ fehler = { "werkstoff_typ": 'Werkstoffvorschlag nicht möglich, da Material nicht in Mappingdatei "Materialübersetzung.json" enthalten ist. Bitte nachpflegen' } gui_data_keys = [ "asm_id", "teilenummer", "datenbank", "pdm_kategorie_neu", "neuaufbau", "aus_halbzeug_neu", "halbzeugnummer_neu", "halbzeuglaenge_neu", "halbzeugoberflaeche_neu", "lebenszyklus_status_neu", "bezeichnung1_sivas", "bezeichnung1_neu", "bezeichnung2_sivas", "bezeichnung2_neu", "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_sivas", "werkstofftyp_sivas", "werkstofftyp_neu", "material_sivas", "material_neu", "oberflaeche_neu", "farbe_neu", "version_sivas", "version_neu", "aenderungsindex_sivas", "aenderungsindex_neu", "aenderungstext_sivas", "aenderungstext_neu", "freigabevermerk_sivas", "freigabevermerk_neu", "zusatzinfos_auto_text", "zusatzinfos_bendef_text", # Felder der Comboboxen. benannt wie deren callbacks "cb_lebenszyklus_status_neu", "cb_3Dmodel_neu", "cb_pdm_kategorie_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_werkstofftyp_neu", "cb_material_neu", "cb_oberflaeche_neu", "cb_farbe_neu", ] class Controller(): """ Class for manipulating the model and returning data for the view """ def __init__(self, model, view): self.set_model(model) self.set_view(view) self.logic = None def add_logic(self, logic): self.logic = logic def remove_logic(self): self.logic = None def set_model(self, model): self.model = model def set_view(self, view): self.view = view def refresh_gui(self): self.view.data_from_model() def data_from_model(self): self.view.data_from_model() def get_current_asm_id(self): self.model.get_current_asm_id() def set_current_asm_id(self, asm_id): self.model.set_current_asm_id(asm_id) def set_current_item_id(self, cid): self.set_gui_data('teilenummer', cid) self.refresh_gui() self.model.sivas_data_from_csv(cid) def set_red_ids(self, red_ids): self.model.set_red_ids(red_ids) def get_red_ids(self): return self.model.get_red_ids() def set_parent_children(self, parent_children_mapping): self.model.set_parent_children(parent_children_mapping) def get_parent_children(self): return self.model.get_parent_children() # merkt sich die reinen Daten zum Impfen def set_data_dict(self, data:dict): """merken der Daten zum Impfen""" for k,v in data: self.set_data(k,v) def set_data(self, key, value): """merken der Daten zum Impfen""" self.model.set_data(key, value) def get_data(self, key): return self.model.get_data(key) def get_all_data(self): return self.model.get_all_data() # merkt sich die Nutzereingaben, bzw. Daten für die GUI def set_gui_dict(self, data:dict): """merken der Eingaben des Nutzers der GUI """ for k,v in data.items(): self.set_gui_data(k,v) def set_gui_data(self, key, value): """merken der Eingaben des Nutzers der GUI """ self.model.set_gui_data(key, value) def get_gui_data(self, key): return self.model.get_gui_data(key) def get_all_gui_data(self): return self.model.get_all_gui_data() def callback(self, key, value): if not self.logic: return model_values = self.logic.callback(key, value) if model_values: self.set_gui_dict(model_values) self.refresh_gui() class GuiLogic(): """ Class for business logic. implementing the dependencies between different user inputs """ def __init__(self, model, configs): # das Modell soll hier nur verwendet werden um aktuell Zustände abzufragen! # alles weitere zum Setzen von Daten etc. muss über den Controller laufen, also zurück gegeben werden. self.model = model # hier holt man die Daten der Configs self.config = configs self.callbacks = [ 'cb_pdm_kategorie_neu', 'cb_neuaufbau', 'cb_aus_halbzeug_neu', 'cb_lebenszyklus_status_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_speichern', 'cb_migrieren', 'cb_zurücksetzen' ] def callback(self, key, value): """gibt ein dict zurück, welches neu im Modell gesetzt wird""" if key not in self.callbacks: raise Exception("this callback does not exist "+key) if key == 'cb_pdm_kategorie_neu': pass elif key == 'cb_neuaufbau': pass elif key == 'cb_aus_halbzeug_neu': pass elif key == 'cb_lebenszyklus_status_neu': pass elif key == 'cb_3Dmodel_neu': pass elif key == 'cb_halbzeugOhneSaege_neu': pass elif key == 'cb_ruestcode_neu': pass elif key == 'cb_fertigungsart_neu': pass elif key == 'cb_allgemeintoleranz_neu': pass elif key == 'cb_fosGruppe_neu': pass elif key == 'cb_kalkulationsart_neu': pass elif key == 'cb_beschaffungsart_neu': pass elif key == 'cb_mengeneinheit_neu': pass elif key == 'cb_halbzeug_neu': pass elif key == 'cb_dispogruppe_neu': pass elif key == 'cb_dispolaufgruppe_neu': pass elif key == 'cb_hersteller_neu': pass elif key == 'cb_werkstoffdiskrepanz': pass elif key == 'cb_werkstofftyp_neu': return self.werkstofftyp(value) elif key == 'cb_material_neu': pass elif key == 'cb_oberflaeche_neu': pass elif key == 'cb_farbe_neu': self.farbe(value) elif key == 'cb_speichern': pass elif key == 'cb_migrieren': pass elif key == 'cb_zurücksetzen': pass else: raise Exception("this callback does not exist "+key) def werkstofftyp(self, selected_werkstoff): """bekommt Aluminium, Stahl etc. und setzt dann die anderen Felder der Oberfläche""" # Logik, die steuert, welcher Defaultwert gilt: # In den nachfolgenden Fällen darf kein Defaultwert eingetragen # werden (selbst wenn in from_siv.csv ein Wert in der Spalte # "Werkstoff" eingetragen sein sollte): # PDM-Kategorie == "Baugruppe" # PDM-Kategorie == "Schweissbaugruppe" # PDM-Kategorie == "Einzelteil" und Aus Halbzeug == True (Haken gesetzt) # Gilt PDM-Kategorie == "Kaufteil" soll der Defaultwert "siehe # Hersteller" eingetragen werden # Gilt PDM-Kategorie == "Einzelteil" und Aus Halbzeug == False (kein # Haken), dann wird der Defaultwert wie folgt bestimmt: ret = dict() # das Feld selbst mit dem Selektierten beschreiben ret['werkstofftyp_neu']= selected_werkstoff pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") if pdm_kat == 'Einzelteil' and aus_halbzeug is False: wnamen = self.config.Werkstoffe.get_werkstoffe_of_name(selected_werkstoff) # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell ret = { # das Feld selbst mit dem Selektierten beschreiben 'werkstofftyp_neu': selected_werkstoff, # die neuen Inhalte der comboboxen setzen 'cb_material_neu': wnamen, # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen 'material_neu': wnamen[0], } return ret def oberfläche(self, selected): ret = dict() # das Feld selbst mit dem Selektierten beschreiben ret['oberflaeche_neu']= selected pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") if pdm_kat == 'Einzelteil' and aus_halbzeug is False: onamen = self.config.Oberfläche.get_oberfläche_of_type(selected) # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell ret = { # die neuen Inhalte der comboboxen setzen 'cb_oberflaeche_neu': onamen, # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen 'oberflaeche_neu': onamen[0], } return ret def farbe(self, selected): farben_alle = self.config.Farben.get_farbauswahl() farben_elox = self.config.Farben.get_farben_eloxieren() # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell ret = { # das Feld selbst mit dem Selektierten beschreiben 'farbe_neu': selected, # die neuen Inhalte der comboboxen setzen 'cb_farben': farben_alle, # der angezeigte Wert der Combos sollte anfangs dem ersten der Liste entsprechen 'farbe_neu': farben_alle[0], } return ret if __name__ == "__main__": pass