diff --git a/lib/manage_configs.py b/lib/manage_configs.py index 81be8f9..6cf0aba 100644 --- a/lib/manage_configs.py +++ b/lib/manage_configs.py @@ -137,12 +137,7 @@ class SivasAssemblyData(JsonBasedConfig): """Gibt alle Teilenummern der Stückliste zurück (auch Teilenummern aus tieferen Baugruppenebenen)""" if self._child_ids is None: - self._child_ids = set() - 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) + self._child_ids = set(self.asm_data.keys()) return self._child_ids @property @@ -170,6 +165,35 @@ class SivasAssemblyData(JsonBasedConfig): ordered_parent_children[parent].append(child) self._parent_children = ordered_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 def longest_child_id(self) -> str: @@ -201,17 +225,28 @@ class SivasAssemblyData(JsonBasedConfig): self._property_names = list(parent_data[0]) return self._property_names - def get_bom_property_values(self, property) -> dict: - """Gibt eine Eigenschaft zu den Teilenummern der Stückliste zurück (z.B. Bezeichnung)""" + def get_prop_val_for_single_id(self, id:str, property_name:str) -> str: + """Gibt eine Eigenschaft von einer einzelnen Teilenummer aus der Stückliste zurück""" + + if id not in self._asm_data: + raise KeyError("Angegebene Teilenummer befindet sich nicht in der Baugruppe!") - if property not in self.property_names: + 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!") id_property_mapping = {} for child, parent_data in self.asm_data.items(): for properties in parent_data: - if property in properties: - id_property_mapping[child] = properties[property] + if property_name in properties: + id_property_mapping[child] = properties[property_name] return id_property_mapping @property @@ -221,7 +256,7 @@ class SivasAssemblyData(JsonBasedConfig): if self._all_bom_properties is None: self._all_bom_properties = {} 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