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