In der Methode 'child_ids' war es unnötig für die Ermittlung aller Stücklistenpositionen das 'Parent'-Attribut der aufgelisteten Teilenummern in der JSON zu betrachten, da die Teilenummern in der JSON bereits alle Kinder der ASM darstellen / Methode 'extend_asm_bom' ergänzt, damit die Stückliste um eine Nummer ergänzt werden kann (z.B. die Nummer der Oberbaugruppe selbst, da diese aktuell in der JSON nicht ausgegeben wird). Dies wurde ergänzt, damit zukünftig auch der Migrationsstand von einzelnen Teilenummern, die keine Baugruppen sind, angezeigt werden kann, bzw. einzelne Teilenummern migriert werden können. Die entsprechende Anpassung des Treeview- bzw. GUI-Programms erfolgt in einem späteren Commit. Zudem wurde die Methode 'get_prop_val_for_single_id' ergänzt, da im Treeview-Programm bisher bei jedem Eintrag des Baums die Methode 'get_prop_val_for_all_ids' aufgerufen wurde, in der jedes Mal eine bestimmte Eigenschaft, wie z.B. 'Bezeichnung' für alle Stücklistenpositionen der Hauptbaugruppe ermittelt wurde. Das war sehr ineffizient, weil die Eigenschaft nur für den aktuellen Eintrag, d.h. die aktuelle Teilenummer, die im Baum dargestellt werden soll, benötigt wird, aber nicht für alle Stücklistenpositionen.
This commit is contained in:
+47
-12
@@ -137,12 +137,7 @@ class SivasAssemblyData(JsonBasedConfig):
|
|||||||
"""Gibt alle Teilenummern der Stückliste zurück (auch Teilenummern aus tieferen Baugruppenebenen)"""
|
"""Gibt alle Teilenummern der Stückliste zurück (auch Teilenummern aus tieferen Baugruppenebenen)"""
|
||||||
|
|
||||||
if self._child_ids is None:
|
if self._child_ids is None:
|
||||||
self._child_ids = set()
|
self._child_ids = set(self.asm_data.keys())
|
||||||
for child_id, parent_properties in self.asm_data.items():
|
|
||||||
self._child_ids.add(child_id)
|
|
||||||
for parent_property in parent_properties:
|
|
||||||
parent_id = parent_property["Parent"]
|
|
||||||
self._child_ids.add(parent_id)
|
|
||||||
return self._child_ids
|
return self._child_ids
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -171,6 +166,35 @@ class SivasAssemblyData(JsonBasedConfig):
|
|||||||
self._parent_children = ordered_parent_children
|
self._parent_children = ordered_parent_children
|
||||||
return self._parent_children
|
return self._parent_children
|
||||||
|
|
||||||
|
def extend_asm_bom(self, id, metadata:dict) -> dict:
|
||||||
|
"""Ergänzt die Stückliste um eine weitere Teilenummer unter Berücksichtigung des vorgegebenen Formats der ausgegebenen JSON
|
||||||
|
des Programms 'Sivas2Json' von Hr. Jakob
|
||||||
|
Aktuell ist die JSON wie folgt aufgebaut:
|
||||||
|
{
|
||||||
|
"Stücklistenposition 1": [{Metadaten aus 1. SIVAS-Stammstückliste, in der die Stücklistenposition verbaut ist},
|
||||||
|
{Metadaten aus 2. SIVAS-Stammstückliste, in der die Stücklistenposition verbaut ist (falls die oberste Baugruppe weitere Unterbaugruppen enthält, in denen diese Nummer ebenfalls verbaut ist)},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
"Stücklistenposition 2": [{...},
|
||||||
|
{...}
|
||||||
|
]
|
||||||
|
}"""
|
||||||
|
|
||||||
|
|
||||||
|
property_names = self.property_names
|
||||||
|
|
||||||
|
asm_data = self.asm_data
|
||||||
|
|
||||||
|
if id not in asm_data:
|
||||||
|
self._asm_data[id] = []
|
||||||
|
|
||||||
|
for property_name in property_names:
|
||||||
|
if property_name not in metadata:
|
||||||
|
metadata[property_name] = None
|
||||||
|
|
||||||
|
self._asm_data[id].append(metadata)
|
||||||
|
return self._asm_data
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def longest_child_id(self) -> str:
|
def longest_child_id(self) -> str:
|
||||||
"""Gibt die längste Teilenummer von allen Stücklistenpositionen zurück"""
|
"""Gibt die längste Teilenummer von allen Stücklistenpositionen zurück"""
|
||||||
@@ -201,17 +225,28 @@ class SivasAssemblyData(JsonBasedConfig):
|
|||||||
self._property_names = list(parent_data[0])
|
self._property_names = list(parent_data[0])
|
||||||
return self._property_names
|
return self._property_names
|
||||||
|
|
||||||
def get_bom_property_values(self, property) -> dict:
|
def get_prop_val_for_single_id(self, id:str, property_name:str) -> str:
|
||||||
"""Gibt eine Eigenschaft zu den Teilenummern der Stückliste zurück (z.B. Bezeichnung)"""
|
"""Gibt eine Eigenschaft von einer einzelnen Teilenummer aus der Stückliste zurück"""
|
||||||
|
|
||||||
if property not in self.property_names:
|
if id not in self._asm_data:
|
||||||
|
raise KeyError("Angegebene Teilenummer befindet sich nicht in der Baugruppe!")
|
||||||
|
|
||||||
|
if property_name not in self._asm_data[id][0]:
|
||||||
|
raise ValueError(f"Teilenummer besitzt nicht die angegebene Eigenschaft '{property_name}'")
|
||||||
|
|
||||||
|
return self._asm_data[id][0][property_name]
|
||||||
|
|
||||||
|
def get_prop_val_for_all_ids(self, property_name) -> dict:
|
||||||
|
"""Gibt eine Eigenschaft zu allen Teilenummern der Stückliste zurück (z.B. Bezeichnung)"""
|
||||||
|
|
||||||
|
if property_name not in self.property_names:
|
||||||
raise ValueError("Angegebener Eigenschaftsname exisitert nicht!")
|
raise ValueError("Angegebener Eigenschaftsname exisitert nicht!")
|
||||||
|
|
||||||
id_property_mapping = {}
|
id_property_mapping = {}
|
||||||
for child, parent_data in self.asm_data.items():
|
for child, parent_data in self.asm_data.items():
|
||||||
for properties in parent_data:
|
for properties in parent_data:
|
||||||
if property in properties:
|
if property_name in properties:
|
||||||
id_property_mapping[child] = properties[property]
|
id_property_mapping[child] = properties[property_name]
|
||||||
return id_property_mapping
|
return id_property_mapping
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -221,7 +256,7 @@ class SivasAssemblyData(JsonBasedConfig):
|
|||||||
if self._all_bom_properties is None:
|
if self._all_bom_properties is None:
|
||||||
self._all_bom_properties = {}
|
self._all_bom_properties = {}
|
||||||
for property_name in self.property_names:
|
for property_name in self.property_names:
|
||||||
self._all_bom_properties[property_name] = self.get_bom_property_values(property_name)
|
self._all_bom_properties[property_name] = self.get_prop_val_for_all_ids(property_name)
|
||||||
return self._all_bom_properties
|
return self._all_bom_properties
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user