diff --git a/lib/controller.py b/lib/controller.py index 8599a76..c8b61fe 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -2,8 +2,7 @@ import os from tkinter import messagebox import update_database -from manage_configs import SivasAssemblyData -from get_teilestamm import FetchSivasTeilestamm +from manage_configs import SivasAssemblyData, RuleDesignerDatabaseConfig, MigrationStatus """ Contains the logic for the MVC of CreoMigrate Gui @@ -96,6 +95,8 @@ class Controller(Observer): ret = self._environment.cfg_dir elif env_path == "log": ret = self._environment.log_dir + elif env_path == "rd_dbase_filename": + ret = self._environment.ruledesigner_csv_filename else: raise Exception("this path is not defined "+env_path) return ret @@ -114,36 +115,26 @@ class Controller(Observer): orange[red] = True return orange - def get_csv_files_of_asm(self, asmid, uselocal): - """ sich die Einzelteile als .csv und den Aufbau des Assemblies als .json holen """ + def get_csv_files_of_asm(self, asm_id, load_local_asm_json, load_local_rd_dbase): + """ Holt sich die Metadaten der Stücklistenpositionen als CSV""" data_dir = self.get_env("data") - sivas_teilestamm = FetchSivasTeilestamm(asmid, data_dir) + rd_dbase_filename = self.get_env("rd_dbase_filename") - # falls uselocal True, dann keine Serverabfrage, sondern mit den lokalen Daten arbeiten - sivas_teilestamm.fetch_from_db(uselocal) - if not uselocal: + asm_data = SivasAssemblyData(data_dir, asm_id + '.json', load_local_asm_json) + 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: - sivas_teilestamm.get_unmigrated_teilstamm_csvs() + update_database.get_sivas_teilestamm(migration_status.red_ids, data_dir) except: self.message_error('Abfrage hat nicht funktioniert', 'sivas_db_error') return - redids = sivas_teilestamm.get_red_ids() - - sad = SivasAssemblyData(data_dir, asmid + '.json') - parent_children = sad.get_parent_children() - - self._model.set_red_ids(redids) - self._model.set_parent_children(parent_children) - self._model.set_asm_id(asmid) - - def get_bom_properties(self, asmid): - """ Holt sich aus Stückliste alle Eigenschaften der Stücklistenpositionen (z.B. Bezeichnung)""" - data_dir = self.get_env("data") - assembly_data = SivasAssemblyData(data_dir, asmid + '.json') - - bom_properties = assembly_data.get_all_bom_properties() - self._model.set_bom_properties(bom_properties) + self._model.set_red_ids(migration_status.red_ids) + self._model.set_parent_children(asm_data.parent_children) + self._model.set_asm_id(asm_id) + self._model.set_bom_properties(asm_data.all_bom_properties) def set_model(self, model): self._model = model @@ -162,15 +153,13 @@ class Controller(Observer): def get_current_asm_id(self): self._model.get_asm_id() - def set_current_asm_id(self, asm_id, loadlocal=False): + def set_current_asm_id(self, asm_id, load_local_asm_json=False, load_local_rd_dbase=False): if not asm_id.isnumeric(): return # TODO save current given data. In case, ask whether you should save or drop self._model.set_asm_id(asm_id) # hole alle Daten vom Server - self.get_csv_files_of_asm(asm_id, loadlocal) - self.get_bom_properties(asm_id) - #self._load_cid_data2model(asm_id) + self.get_csv_files_of_asm(asm_id, load_local_asm_json, load_local_rd_dbase) def set_current_item_id(self, cid): """setze eine neue Item ID """ @@ -301,7 +290,7 @@ class Controller(Observer): elif key == 'cb_ladelokal_asm': current_asmid = self.data_from_view('asm_id') # hole dir nur die lokalen Daten. Keine Datenbankabfrage - self.set_current_asm_id(current_asmid, True) + self.set_current_asm_id(current_asmid, load_local_asm_json=True, load_local_rd_dbase=True) elif key == 'cb_3dsuchen': self.suche_3d()