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:
2025-03-09 00:37:10 +01:00
parent 6f188649ff
commit 4f740e81ad
+19 -30
View File
@@ -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()