Vor Durchführung der Migration wird nun zusätzlich geprüft, ob Teilenummern in der Blacklist fehlen. Ist immer dann der Fall, wenn eine Teilenummer eine Stückliste besitzt und sich darin Positionsnummern befinden, die beigestellt oder dispo-inaktiv sind.
This commit is contained in:
@@ -234,6 +234,7 @@ class CadItem(DataModel):
|
||||
super().__init__()
|
||||
self._red_ids = {}
|
||||
self._parent_children_mapping = {}
|
||||
self._bom_properties = {}
|
||||
self._data = {}
|
||||
self._gui_data = {}
|
||||
self._gui_states = {}
|
||||
@@ -280,7 +281,18 @@ class CadItem(DataModel):
|
||||
self._red_ids = red_ids
|
||||
def get_red_ids(self):
|
||||
return self._red_ids
|
||||
|
||||
def set_bom_properties(self, properties) -> dict:
|
||||
""""
|
||||
Contains the properties of the BOM-positions(e.g. description, material etc.)
|
||||
"""
|
||||
self._bom_properties = properties
|
||||
|
||||
def get_bom_properties(self, property_name) -> dict:
|
||||
if property_name not in self._bom_properties:
|
||||
raise ValueError(f"Property '{property_name}' doesn't exist in BOM! Check property spelling!")
|
||||
else:
|
||||
return self._bom_properties[property_name]
|
||||
|
||||
# Methoden um die Verwendbarkeit einzelner Schalter auszugrauen
|
||||
def set_read_only_dict(self, data:dict):
|
||||
@@ -700,6 +712,30 @@ class CadItem(DataModel):
|
||||
return (False, missing)
|
||||
else:
|
||||
return (True, [])
|
||||
|
||||
def check_blacklist_completeness(self):
|
||||
""" Prüft, ob Baugruppen-id in Blacklist fehlt
|
||||
-> zutreffend, wenn in Stückliste beigestellte oder dispo-inaktive Stücklistenpositionen existieren
|
||||
"""
|
||||
teilenummer = self.get_gui_data("teilenummer")
|
||||
child_id = self.get_child_of_id(teilenummer)
|
||||
|
||||
if child_id is None: # Prüfung nur bei Teilenummern mit Stückliste sinnvoll
|
||||
return (True, {})
|
||||
|
||||
config = self._controller.get_config()
|
||||
blacklist_ids = set(config.get_blacklist())
|
||||
|
||||
ids_dispoaktiv_status = self.get_bom_properties("Dispoaktiv")
|
||||
ids_beistellung_status = self.get_bom_properties("Lieferantenbeistellung")
|
||||
|
||||
if not "False" in ids_dispoaktiv_status.values() or not "True" in ids_beistellung_status.values():
|
||||
return (True, {})
|
||||
|
||||
if teilenummer not in blacklist_ids:
|
||||
return (False, {teilenummer})
|
||||
else:
|
||||
return (True, {})
|
||||
|
||||
def check_improper_chars(self, invalid_chars):
|
||||
""" überprüft ob inder Oberfläche nicht erlaubte Zeichen eingetragen wurden"""
|
||||
|
||||
+26
-1
@@ -45,7 +45,8 @@ messages = {
|
||||
"wrong_impftool_path": 'Pfad zur DataPrepUtility.exe nicht gefunden. Bitte setenv.bat prüfen.' ,
|
||||
"too_many_logfiles":'Keine eindeutige Logdatei zum aktuellen DataPrep Prozess gefunden. Bitte löschen Sie die überflüssigen .log files',
|
||||
"some_error_in_log":'Log Datei enthält einen Fehler. Bitte prüfen.',
|
||||
"preparation_sucessful":'Preparation mit der Datei {path} erfolgreich'
|
||||
"preparation_sucessful":'Preparation mit der Datei {path} erfolgreich',
|
||||
"missing_in_blacklist":"{teilenummer} fehlt in der Blacklist, da sich in dessen Stückliste beigestellte oder dispo-inaktive Positionen befinden.\n\nBitte {teilenummer} in die Blacklist aufnehmen!"
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +136,14 @@ class Controller(Observer):
|
||||
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):
|
||||
self._model = model
|
||||
self.attach(model)
|
||||
@@ -159,6 +168,7 @@ class Controller(Observer):
|
||||
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)
|
||||
|
||||
def set_current_item_id(self, cid):
|
||||
@@ -260,6 +270,8 @@ class Controller(Observer):
|
||||
text = text.format(Zeichentyp=values['Zeichentyp'], Feldname=values['Feldname'] )
|
||||
if 'path' in values:
|
||||
text = text.format(path=values['path'])
|
||||
if 'teilenummer' in values:
|
||||
text = text.format(teilenummer=values['teilenummer'])
|
||||
return messagebox.showerror(title, text)
|
||||
|
||||
def callback(self, key, value):
|
||||
@@ -303,12 +315,23 @@ class Controller(Observer):
|
||||
|
||||
def migrieren(self):
|
||||
self._view.reset_labels()
|
||||
|
||||
# Pruefung ob Pflichtfelder befuellt
|
||||
(ok, missing) = self._model.check_pflichtfelder()
|
||||
if ok == False:
|
||||
labels = ', '.join(missing)
|
||||
self.message_error('Fehlende Angaben', 'missing_data', {'Labels':labels})
|
||||
self._view.highlight_labels(missing)
|
||||
return
|
||||
|
||||
# Pruefung ob assembly-id in Blacklist fehlt
|
||||
(ok, missing_blacklist_id) = self._model.check_blacklist_completeness()
|
||||
if ok == False:
|
||||
id = ''.join(missing_blacklist_id)
|
||||
self.message_error('Fehlend in Blacklist', 'missing_in_blacklist', {'teilenummer': id})
|
||||
return
|
||||
|
||||
# Pruefung, ob unzulaessige Zeichen vorhanden
|
||||
invalid_chars = self._config.InvalidChars.get()
|
||||
(ok, wrongchars) = self._model.check_improper_chars(invalid_chars)
|
||||
if ok == False:
|
||||
@@ -317,6 +340,8 @@ class Controller(Observer):
|
||||
self.message_error('Unzulässige Zeichen', 'unzulaessige_zeichen', {'Zeichentyp': chars, 'Feldname':label})
|
||||
self._view.highlight_labels(wrongchars)
|
||||
return
|
||||
|
||||
# Pruefung Feldinhalte
|
||||
ok = self._model.check_content()
|
||||
if ok == True:
|
||||
data = self._model.create_migration_data()
|
||||
|
||||
+13
-2
@@ -112,7 +112,7 @@ class SivasAssemblyData(JsonBasedConfig):
|
||||
return list(parent_data[0])
|
||||
|
||||
@_lazy_init_assembly_data
|
||||
def get_property(self, property) -> dict:
|
||||
def get_bom_property_values(self, property) -> dict:
|
||||
"""Gibt eine Eigenschaft zu den Teilenummern der Stückliste zurück (z.B. Bezeichnung)"""
|
||||
|
||||
if property not in self.get_property_names():
|
||||
@@ -121,9 +121,20 @@ class SivasAssemblyData(JsonBasedConfig):
|
||||
id_property_mapping = {}
|
||||
for child, parent_data in self.assembly_data.items():
|
||||
for properties in parent_data:
|
||||
id_property_mapping[child] = properties[property]
|
||||
if property in properties:
|
||||
id_property_mapping[child] = properties[property]
|
||||
return id_property_mapping
|
||||
|
||||
@_lazy_init_assembly_data
|
||||
def get_all_bom_properties(self) -> dict:
|
||||
"""Gibt alle Eigenschaften zu den Teilenummern der Stückliste zurück (z.B. Bezeichnung)"""
|
||||
|
||||
all_properties = {}
|
||||
property_names = self.get_property_names()
|
||||
for property_name in property_names:
|
||||
all_properties[property_name] = self.get_bom_property_values(property_name)
|
||||
return all_properties
|
||||
|
||||
|
||||
class RuleDesignerDatabaseConfig(CSVBasedConfig):
|
||||
"""Auslesen der Angaben aus der RuleDesigner-Datenbank-CSV"""
|
||||
|
||||
Reference in New Issue
Block a user