Das Einladen der JSON- und RuleDesigner-Daten erfolgt nun allein i.V.m 'manage_configs.py' und nicht mehr i.V.m der Klasse FetchSivasTeilestamm in der Datei 'get_teilestamm.py'. Dies wurde einerseits durchgeführt, um die Anzahl an Referenzen zu verringern, hauptsächlich jedoch, weil in der Klasse 'FetchSivasTeilestamm' die Klasse 'MigrationsStatus' in 'manage_configs.py' aufgerufen wird, in der wiederum Objekte der Klassen 'SivasAssemblyData' und 'RuleDesignerConfig' initiiert werden. Das ist sehr ineffizient, weil 'SivasAssemblyData' bereits in dieser Datei, also 'controller.py' initiiert wird. Es wurde zudem ergänzt, dass nun auch die lokale Version der CSV-Datei, die die RD-Teilenummern enthält geladen werden kann, ohne den aktuellen Stand vom Server zu kopieren.
This commit is contained in:
+19
-30
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user