diff --git a/cfg/Zielpfade.cfg b/cfg/Zielpfade.cfg index 68ea929..28ba645 100644 --- a/cfg/Zielpfade.cfg +++ b/cfg/Zielpfade.cfg @@ -1,6 +1,6 @@ [Zielpfade] -\\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\02_Bedarfspool -\\ssg.local\freigaben\SIVAS_CAD_EDM\Schulung\Migration\02_Bedarfspool +Produktiv=\\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\02_Bedarfspool +Schulung=\\ssg.local\freigaben\SIVAS_CAD_EDM\Schulung\Migration\02_Bedarfspool [3D-Modelle] BaugruppeSchweissbaugruppe=\\ssg.local\freigaben\Abteilungen\Entwicklung\CAD\Standards\SolidEdge\Template\DIN Metric\baugruppe.asm diff --git a/lib/caditem.py b/lib/caditem.py index d6b8d49..f056e64 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -553,9 +553,9 @@ class CadItem(DataModel): def message_info(self, title, key, questions='ok'): return self._controller.message_info(title, key, questions) - def message_error(self, title, key, values=None): + def message_error(self, title, key, values={}): return self._controller.message_error(title, key, values) - def message_question(self, title, key, values=None): + def message_question(self, title, key, values={}): return self._controller.message_question(title, key, values) def check_key_existence(self, key, missing): @@ -666,7 +666,9 @@ class CadItem(DataModel): return None - def check_content(self): + def check_content(self): + """Überprüfe die Inhalte nach Längen, Zeichenketten und korrekten Kombinationen der Eingaben""" + content = self.get_content('bezeichnung1_sivas', 'bezeichnung1_neu') if len(content) > 50: self.message_error('Bezeichnung1 zu gross', 'bezeichnung_zu_gross') @@ -686,6 +688,10 @@ class CadItem(DataModel): self.message_error('Teilenummer ohne Rüstcode', 'teilenummer_ohne_ruestcode') return False + if pdm_kategorie_neu == "": + self.message_error('Kategorie nicht definiert', 'pdm_kategorie_definiert') + return False + # Fertigungsart fertigungsart = self.get_content('fertigungsart_sivas', 'fertigungsart_neu') arten = ["3D - 3D-drucken", "EX - extrudieren", "GI - gießen", "PR - verpressen", "SN - strangpressen", "SP - spritzgießen", "SW - schweißen"] @@ -809,24 +815,225 @@ class CadItem(DataModel): # return # Farbe - farbe = self._model.get_gui_data("farbe_neu") - if werkstofftyp == '': - self.message_error('Werkstofftyp nicht eingetragen', 'werkstofftyp_not_exist') + farbe = self.get_gui_data("farbe_neu") + oberflaeche = self.get_gui_data("oberflaeche_neu") + if farbe == '' and (oberflaeche == "Masterbatch (Grundfarbe)" or \ + oberflaeche == "eloxieren" or\ + oberflaeche == "pulverbeschichten" or\ + oberflaeche == "lackieren"): + self.message_error('Farbe nicht festgelegt', 'color_not_defined') return False # Überprüfung ob eine Ergänzung der Angaben zu Material in der Config Datei nötig wäre - aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu") + aus_halbzeug = self.get_gui_data("aus_halbzeug_neu") if pdm_kategorie_neu == "Einzelteil" and aus_halbzeug == False: mlist = self._controller.get_config().Materialien.get_all_materials() - material_sivas = self._model.get_gui_data("material_sivas") + material_sivas = self.get_gui_data("material_sivas") if material_sivas not in mlist: - self._model.message_info('Materialinformation', 'material_infos') + self.message_info('Materialinformation', 'material_infos') return True + def create_migration_file(self, data): + """erzeugt Verzeichnis und Datei""" + model3d_neu = self.get_gui_data("model3d_neu") + datenbank = self.get_gui_data("datenbank") + path = os.path.dirname(model3d_neu) + filename = os.path.basename(model3d_neu) + + # IF Datenbank == "Produktiv": + # New_path = \\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\02_Bedarfspool\ + # ELSE: + # New_path = \\ssg.local\freigaben\SIVAS_CAD_EDM\Schulung\Migration\02_Bedarfspool + zielpfad = self._config.Pfade.get('Zielpfade', datenbank ) + username = os.environ.get("USERNAME") + userpfad = os.path.join(zielpfad, username) + # Wenn User, der migriert, noch keinen Ordner im Ziel besitzt, + # soll dieser automatisch beim Klick auf "Migrieren" angelegt werden. + if not os.path.exists(userpfad): + os.mkdir(userpfad) + + def tos_to_dict(self, tosgruppe, num2refId, num2child): + tosstr = str(tosgruppe) + ret = dict() + keybefore = '' + for n in range(1, len(tosstr)+1): + if n == 1: + spaltenName = "TOS-Gruppe" + else: + spaltenName = keybefore + key = tosstr[0:n] + if key in num2refId: + parentKey = num2refId[key] + content = num2child[key] + ret[spaltenName] = content + else: + spaltenName = keybefore + ret[spaltenName] = num2child[key] + keybefore = parentKey + return ret + def create_migration_data(self): - pass + data = { + "Delete": "" , + "Document Number": "-", + "Revision": "-", + "Project Name": "-", + "Teamcenter Item Type": "-", + "Part Type": "-", + "TC_ImportTime": "-", + "Last Saved Version": "-", + "Subject": "-", + "Category": "-", + "Keywords": "-", + } + all_data = self.get_all_gui_data() + # data_keys = [ "Author", "Teilenummer", "StartRevision", + # "Bezeichnung1", "Bezeichnung2", "Bezeichnung4", "KategorieNE", + # "BeschaffungsartNE", "TOS-Gruppe_ERP", "Dispogruppe", + # "Dispolaufgruppe", "WerkstofftypNE", "WerkstoffNE", + # "Oberflaechenbehandlung", "Farbe", "KalkulationsartNE", + # "RuestcodeAusw", "Fertigungsart", "Allgemeintoleranz", + # "HalbzeugInternAngabe", "Halbzeug", "HalbzeugOhneSaegeliste", + # "EinheitNE", "FOS-GruppeNE", "Hersteller", "HerstellerTeilenummer", + # "Serien-Status", "Kantennorm", "Oberflaechennorm", "Massnorm", + # "Tolerierungsnorm","Änderungsbeschreibung", + # "Freigabevermerk", "ZusaetzlicheInformationen"] + # Path + 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 + if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe": + title = bezeichnung1 + " - BG" + data["Title"] = title + + # Bezeichnung 4 + bezeichnung4 = "" + if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe": + bezeichnung4 = " - BG" + data["Bezeichnung4"] = bezeichnung4 + + # Author + username = os.environ.get("USERNAME") + data["Author"] = username + + # 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') + trans = { + "3D - 3D-drucken":"3D-drucken", + "3D - 3D drucken":"3D-drucken", + "BI - biegen":"biegen", + "DR - drehen":"drehen", + "EX - extrudieren":"extrudieren", + "FR - fräsen":"fräsen", + "GI - gießen":"gießen", + "LW - laser- und wasserstrahlschneiden":"laser-/wasserstrahlschneiden", + "PR - verpressen":"verpressen", + "SA - sägen":"sägen", + "SN - strangpressen":"strangpressen", + "SP - spritzgießen":"spritzgießen", + "ST - stanzen":"stanzen", + "SW - schweißen":"schweißen", + } + data["Fertigungsart"] = trans[fertigungsart] + + # FOS Gruppe + fos_gruppe = self.get_content('fosGruppe_sivas', 'fosGruppe_neu') + trans = { + "0 - Einzelteil":"Einzelteil", + "1 - Baugruppe":"Baugruppe", + } + data["Fertigungsart"] = trans[fos_gruppe] + + + # Mengeneinheit + mengeneinheit = self.get_content('mengeneinheit_sivas', 'mengeneinheit_neu') + trans = { + "L - Liter":"L", + "mm - Millimeter":"mm", + "Stck - Stück":"Stck", + "M - Meter":"m", + "m2 - Quadratmeter":"m²", + "dm³ - Kubikdezimeter":"dm³", + "m³ - Kubikmeter":"m³", + } + data["Mengeneinheit"] = trans[mengeneinheit] + + + # Halbzeug + halbzeug = self.get_content('halbzeug_sivas', 'halbzeug_neu') + trans = { + "WAHR":"Ja", + "FALSCH":"", + } + data["Halbzeug"] = trans[halbzeug] + + # TOS-Gruppe + # Nr. Spaltenname in Impfdatei Wert in Impfdatei + # 3 TOS-Gruppe Schönenberger Produkt + # 33 TOS_Schoenenberger_Produkt ILS IntraLogistikSystem + # 330 TOS_ILS ILS 2.0 + # 3303 TOS_ILS_2 Laufprofil 2.0 + (num2refId, num2child) = self._controller.get_config().TOSGruppen.get_Id2TosGroup() + tosgruppe = self.get_content('tosgruppe_sivas', 'tosgruppe_neu') + newcolumns = self.tos_to_dict(tosgruppe, num2refId, num2child) + data.update(newcolumns) + + + # Dispogruppe + dispogruppe = self.get_content('dispogruppe_sivas', 'dispogruppe_neu') + trans = { + "10 - Fahrstrecke":"Fahrstrecke", + "20 - Förderer":"Förderer", + "30 - Gerüst":"Gerüst", + "40 - Betriebsmittel":"Betriebsmittel", + "50 - Automation":"Automation", + "60 - Kleinteile":"Kleinteil", + "70 - Rohmaterial":"Rohmaterial", + "80 - Sonstiges Intern":"Sonstiges Intern", + "90 - Baustelleneinrichtung":"Baustelleneinrichtung", + "100 - Sonderkonstruktionen":"Sonderkonstruktionen", + } + data["Dispogruppe"] = trans[dispogruppe] + + + # Dispolaufgruppe + dispolaufgruppe = self.get_content('dispolaufgruppe_sivas', 'dispolaufgruppe_neu') + trans = { + "10 - Omniflo":"Omniflo", + "20 - Intra Logistic System + Alt-HFS":"Intra Logistic System + alt-HFS", + "30 - Fremd-Transportsysteme + SSG-Anbauten":"Fremd-Transportsysteme + SSG-Anbauten", + "40 - Spinnereikomponenten":"Spinnereikomponente", + "45 - Automotiv":"Automotiv", + "50 - Nicht eindeutig, Sonder":"Nicht eindeutig, Sonder", + } + data["Dispolaufgruppe"] = trans[dispolaufgruppe] + + # ZusaetzlicheInformationen + # Die Werte aus den Feldern Automatische Zusatzinformationen und + # Benutzerdefinierte Zusatzinformationen müssen vor dem Eintragen in + # die Impfdatei zusammengesetzt werden + zusatzinfos_auto_text = self.get_gui_data("zusatzinfos_auto_text") + zusatzinfos_bendef_text = self.get_gui_data("zusatzinfos_bendef_text") + data["ZusaetzlicheInformationen"] = zusatzinfos_auto_text + zusatzinfos_bendef_text + + class CadItemRepository: """ diff --git a/lib/controller.py b/lib/controller.py index 74ff75a..7654599 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -9,6 +9,7 @@ Contains the logic for the MVC of CreoMigrate Gui """ # Infos und Fehlermeldungen die ausgelöst werden können messages = { + "pdm_kategorie_definiert": "PDM-Kategorie nicht definiert", "rüstcode_infos": 'Bitte Rüstcode auswählen!', "beschaffungsart_infos": ' Komponenten der Schweißbaugruppe müssen eigene Teilenummern erhalten, falls diese aktuell als Underline-Nummern in der Creo-Baugruppe vorliegen, aber keine eigenen Teilenummern in SIVAS besitzen!', "mengeneinheit_infos":'Bitte prüfen, ob Mengeneinheit ≠ "M - Meter" korrekt ist!', @@ -29,7 +30,7 @@ messages = { "teilenummer_not_exist_infos":"Ersetzte Teilenummer '{teilenummer}' exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?", "ersatzteilenummer_not_exist_infos":"Ersatz-Teilenummer '{teilenummer}' exisitert noch nicht in RuleDesigner. Migration trotzdem durchführen?", "hersteller": "Hersteller nicht in RuleDesigner enthalten. Bitte nachpflegen!", - "werkstofftyp_not_exist":'Eingetragener Werkstofftyp existieert nicht. Bitte korrigeren!', + "werkstofftyp_not_exist":'Eingetragener Werkstofftyp existiert nicht. Bitte korrigeren!', "werkstoff_not_exist":'Werkstoff falsch. Bitte korrigieren!', "color_not_defined":'Teilenummer kann nicht ohne festgelegte Farbe migriert werden!', "aenderungstext_too_long":'Änderungstext_weist zu viele Zeichen auf. Bitte auf 400 Zeichen verkürzen!', @@ -214,7 +215,7 @@ class Controller(Observer): def message_info(self, title, key, questions='ok'): return messagebox.showinfo(title, messages[key]) - def message_question(self, title, key, values): + def message_question(self, title, key, values={}): text = messages[key] if 'teilenummer' in values: text = text.format(teilenummer=values['teilenummer']) @@ -222,7 +223,7 @@ class Controller(Observer): if 'default' in values and values['default'] == 'yes': default = messagebox.YES return messagebox.askquestion(title, text, type=messagebox.YESNO, default=default) - def message_error(self, title, key, values): + def message_error(self, title, key, values={}): text = messages[key] if 'Labels' in values: text = text.format(Labels=values['Labels']) @@ -273,17 +274,18 @@ class Controller(Observer): # labels = ', '.join(missing) # self.message_error('Fehlende Angaben', 'missing_data', {'Labels':labels}) # return - # invalid_chars = self._config.InvalidChars.get() - # (ok, wrongchars) = self._model.check_improper_chars(invalid_chars) - # if ok == False: - # for label,achars in wrongchars.items(): - # chars = ''.join(achars) - # self.message_error('Unzulässige Zeichen', 'unzulaessige_zeichen', {'Zeichentyp': chars, 'Feldname':label}) - # return + invalid_chars = self._config.InvalidChars.get() + (ok, wrongchars) = self._model.check_improper_chars(invalid_chars) + if ok == False: + for label,achars in wrongchars.items(): + chars = ''.join(achars) + self.message_error('Unzulässige Zeichen', 'unzulaessige_zeichen', {'Zeichentyp': chars, 'Feldname':label}) + return ok = self._model.check_content() if ok == True: - data = self._model.create_migration_data() - + data = self._model.create_migration_data() + #self._model.create_migration_file(data) + def zuruecksetzen(self): cid = self.get_current_item_id() self._model.clear()