diff --git a/lib/controller.py b/lib/controller.py index d1a1b76..649dad2 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -30,79 +30,7 @@ messages = { } -# die folgende Hash ist nur für schnelleres Editieren hier -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_pdm_kategorie_neu", - "cb_halbzeug_neu", - "cb_halbzeugoberflaeche", - "cb_halbzeugfarbe", - "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_dispogruppe_neu", - "cb_dispolaufgruppe_neu", - "cb_hersteller_neu", - "cb_werkstofftyp_neu", - "cb_material_neu", - "cb_oberflaeche_neu", - "cb_farbe_neu", - # buttons - "cb_speichern", - "cb_migrieren", - "cb_zurücksetzen", -] - - class Controller(): - - """ Class for manipulating the model and returning data for the view """ @@ -152,12 +80,36 @@ class Controller(): def set_current_item_id(self, cid): + """setze eine neue Item ID """ + # check before. change to given item just in case it is valid, e.g. name is a number of 9 digits + if not cid.isnumeric(): + return + + # TODO save current given data. In case, ask whether you should save or drop self.set_gui_data('teilenummer', cid) - - loaded_csv = self.model.sivas_data_from_csv(cid) - gui_dict = self.logic.csv2guidata(loaded_csv) - self.model.set_gui_dict(gui_dict) - self.refresh_gui() + + # falls eine .json Datei davon existiert, dann diese zuerst versuchen zu laden + #self.model.load(demo_data) + gui_dict = None + loaded_json = self.model.sivas_data_from_json(cid) + if loaded_json: + # falls eine .json Datei dieser ID existiert, dann diese laden + gui_dict = self.logic.csv2guidata(loaded_csv) + else: + # ansonsten die .csv Datei mit den SIVAS Infos holen + # TODO + loaded_csv = self.model.sivas_data_from_csv(cid) + if loaded_csv: + # und dann diese laden + gui_dict = self.logic.csv2guidata(loaded_csv) + if not gui_dict: + print("no file found "+ cid) + else: + self.model.set_gui_dict(gui_dict) + self.refresh_gui() + + def get_current_item_id(self): + return self.get_gui_data('teilenummer') def set_red_ids(self, red_ids): @@ -201,10 +153,28 @@ class Controller(): def callback(self, key, value): if not self.logic: return + + # Logik um neue Werte in Oberfläche oder Modell zu füllen model_values = self.logic.callback(key, value) if model_values: self.set_gui_dict(model_values) self.refresh_gui() + + # reine Aktionen + if key == 'cb_speichern': + self.save_to_file() + elif key == 'cb_migrieren': + pass + elif key == 'cb_zurücksetzen': + pass + elif key == 'cb_suche_asm': + pass + + def save_to_file(self): + """speichert die bisherigen Eingaben beider Spalten in eine json Datei""" + path = os.path.join(self.get_env("out"), str(self.get_current_item_id()) + '.json') + # die Bauminfos und RedIds dazu werden standardmässig nicht mit gemerkt. + self.model.save(path, False) class GuiLogic(): """ @@ -217,34 +187,7 @@ class GuiLogic(): # hier holt man die Daten der Configs self.config = configs # hier sind alle Callbacks bzw. deren Comboboxen - 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', - 'cb_suche_asm' - ] + # dies sind die Excel Headel der SIVAS csv Export Datei # und wie diese in das Datenmodell der Gui integriert werden kann self.excel_to_gui = { @@ -294,6 +237,8 @@ class GuiLogic(): ret.update(r1) r2 = self.callback("cb_aus_halbzeug_neu", None) ret.update(r2) + r3 = self.callback("cb_halbzeugoberflaeche", None) + ret.update(r3) # add entry dependencies dep = self.entry_dependencies(ret) @@ -301,24 +246,20 @@ class GuiLogic(): return ret def entry_dependencies(self, data): - ret = dict() + return {} - halbzeugoberflaeche = data["halbzeugoberflaeche_neu"] - if data["aus_halbzeug_neu"] == True: - if halbzeugoberflaeche == "eloxieren" or halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": - pass - else: - ret["halbzeugoberflaeche_neu"] = '' - else: - ret["halbzeugoberflaeche_neu"] = '' - return ret 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_halbzeug_neu": + pass + elif key == "cb_halbzeugoberflaeche": + return self.halbzeug_oberflaeche_neu(value) + elif key == "cb_halbzeugfarbe": + return self.halbzeug_farbe_neu(value) elif key == 'cb_neuaufbau': return self.neuaufbau(value) elif key == 'cb_aus_halbzeug_neu': @@ -354,7 +295,8 @@ class GuiLogic(): elif key == 'cb_werkstoffdiskrepanz': pass elif key == 'cb_werkstofftyp_neu': - return self.werkstofftyp(value) + pass + # return self.werkstofftyp(value) elif key == 'cb_material_neu': pass elif key == 'cb_oberflaeche_neu': @@ -383,67 +325,11 @@ class GuiLogic(): ret = dict() pdm_kat = self.model.get_gui_data("pdm_kategorie_neu") if pdm_kat == "Einzelteil": - pass + ret = self.callback("cb_halbzeugoberflaeche", None) else: ret["aus_halbzeug_neu"] = False return ret - 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() @@ -460,6 +346,113 @@ class GuiLogic(): return ret + def halbzeug_oberflaeche_neu(self, selected): + ret = dict() + aus_halbzeug = self.model.get_gui_data("aus_halbzeug_neu") + if aus_halbzeug == "True": + oarten = self.config.Oberfläche.get_oberflächen_behandlungen() + if not selected is None: + ret['cb_halbzeugoberflaeche'] = selected + else: + ret = { + 'halbzeugoberflaeche_neu': oarten[0], + 'cb_halbzeugoberflaeche': oarten, + } + else: + ret = { + 'halbzeugoberflaeche_neu': "", + 'cb_halbzeugoberflaeche': "", + } + return ret + + def halbzeug_farbe_neu(self, selected): + ret = dict() + data = self.model.get_gui_data("halbzeug_farbe_neu") + if "halbzeugoberflaeche_neu" in data: + halbzeugoberflaeche = data["halbzeugoberflaeche_neu"] + if data["aus_halbzeug_neu"] == True: + if halbzeugoberflaeche == "eloxieren" or halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": + if halbzeugoberflaeche == "eloxieren": + farben_elox = self.config.Farben.get_farben_eloxieren() + # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + ret = { + # die neuen Inhalte der comboboxen setzen + 'halbzeugfarbe_neu': farben_elox[0], + 'cb_halbzeugfarbe': farben_elox, + + } + elif halbzeugoberflaeche == "lackieren" or halbzeugoberflaeche == "pulverbeschichten": + farbauswahl = self.config.Farben.get_farbauswahl() + # setze die Inhalte der abhängigen Comboboxen neu und den Wert im Modell + ret = { + 'halbzeugfarbe_neu': farbauswahl[0], + 'cb_halbzeugfarbe': farbauswahl, + } + + else: + ret["halbzeugoberflaeche_neu"] = '' + else: + ret["halbzeugoberflaeche_neu"] = '' + return ret + + + # 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 + if __name__ == "__main__": pass