diff --git a/lib/controller.py b/lib/controller.py index 606011a..e41ec07 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -2,7 +2,7 @@ import os from tkinter import messagebox import update_database -from manage_configs import SivasBOM, RuleDesignerDatabaseConfig, MigrationStatus +from manage_configs import SivasBOM, SivasTeilestamm, RuleDesignerDatabaseConfig, MigrationStatus """ Contains the logic for the MVC of CreoMigrate Gui @@ -115,26 +115,27 @@ class Controller(Observer): orange[red] = True return orange - def get_csv_files_of_asm(self, asm_id, load_local_asm_json, load_local_rd_dbase): + def get_csv_files_of_asm(self, asm_id, load_local_asm_json=False, load_local_rd_dbase=False): + """ Holt sich die Metadaten der Stücklistenpositionen als CSV""" data_dir = self.get_env("data") rd_dbase_filename = self.get_env("rd_dbase_filename") - asm_data = SivasBOM(data_dir, asm_id + '.json', load_local_asm_json) + sivas_bom = SivasBOM(data_dir, asm_id + '.json', load_local_asm_json) + 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_dbase) - migration_status = MigrationStatus(asm_data.child_ids, rd_data.ids) - if not load_local_asm_json: - try: - update_database.get_sivas_teilestamm(migration_status.ids_pending, data_dir) - except: - self.message_error('Abfrage hat nicht funktioniert', 'sivas_db_error') - return + migration_status = MigrationStatus(sivas_bom.child_ids, rd_data.ids) + pending_ids = migration_status.ids_pending - self._model.set_red_ids(migration_status.ids_pending) - self._model.set_parent_children(asm_data.parent_children) + sivas_teilestamm = SivasTeilestamm(data_dir, asm_id + '.csv') + sivas_teilestamm.create_csvs(pending_ids) + + 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_properties(asm_data.all_bom_properties) + self._model.set_bom_properties(sivas_bom.all_bom_properties) def set_model(self, model): self._model = model diff --git a/lib/gui.py b/lib/gui.py index 1f06146..da792c8 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -55,10 +55,7 @@ class AllFrames(): class TreeView(): def __init__(self, frame, nrow=0): # a treeview - # hier Anzahl der sichtbaren Zeilen des Baums angeben: - self.tree = ttk.Treeview(frame, height=65) - # TODO hier anstatt root die Statistik rein schreiben. - #self.tree.heading('#0', text='root', anchor=tk.W) + self.tree = ttk.Treeview(frame, height=65) # 'height' steuert Anzahl der sichtbaren Zeilen im Baum self.tree.grid(row=nrow, column=0, sticky=tk.NSEW) # add a scrollbar @@ -75,7 +72,9 @@ class TreeView(): done_items = set() undone_items = set() for parent,children in parent_children_mapping.items(): - if parent in red_ids: + if parent is None: + pass + elif parent in red_ids: undone_items.add(parent) else: done_items.add(parent) @@ -108,18 +107,16 @@ class TreeView(): self.tree.delete(c) def _has_childs(self, sid, parent_children_mapping): - '''gibt zurück ob sid ein ein Zwischenknoten eines Baume ist, also kein Blatt hat''' - for parent,children in parent_children_mapping.items(): - if sid == parent: - return True - return False + '''gibt zurück ob sivas-id ein Zwischenknoten eines Baume ist, also kein Blatt hat''' + return True if sid in parent_children_mapping else False def create(self, parent_children_mapping, red_ids, orange_ids): pool = dict() - self.set_heading_text(parent_children_mapping, red_ids) for parent, children in parent_children_mapping.items(): # parent erzeugen, falls es diese nicht schon gibt (check der pool ids) - if parent not in pool: + if parent is None: + parent_id = None + elif parent not in pool: if parent not in red_ids: rowtags = ('good') elif parent in orange_ids: rowtags = ('orange') else: rowtags = ('missing') @@ -148,7 +145,9 @@ class TreeView(): child_id = self.tree.insert('', tk.END, text=child, tags=rowtags, open=True) pool[child] = child_id # hier werden die keys - sivas Nummern auch überschrieben self.trid2sivasId[child_id] = child # merken der eindeutigen Zuordnung für den späteren Doppelklick - self.tree.move(child_id, parent_id, 'end') + + if parent_id is not None: + self.tree.move(child_id, parent_id, 'end') # https://www.askpython.com/python-modules/tkinter/tkinter-colors #self.tree.tag_configure('good', background='LawnGreen')