Treeview angepasst, damit die Bezeichnung der obersten Baugruppe angezeigt wird, da dies bisher nicht der Fall war. Da die Bezeichnung nicht in der Baugruppen-JSON aufgeführt ist, ist es erforderlich die CSV mit den Teilestamm-Metadaten zur Baugruppennummer herunterzuladen. Damit dies möglich ist, wurde wurde in manage_configs.py eine neue Subclass 'TeilestammMetadata' ergänzt. In compare_lists.py wurden dabei weitere Flags ergänzt, mit denen gesteuert werden kann, ob die Bezeichnung aus der lokalen CSV-Datei gezogen werden sollen, oder ob die CSV mit jedem Programmlauf neu erstellt wird. Defaultmäßig wird sie mit jedem Programmlauf neu erstellt
This commit is contained in:
+75
-23
@@ -1,4 +1,4 @@
|
||||
from manage_configs import SivasAssemblyData, RuleDesignerDatabaseConfig, MigrationStatus
|
||||
from manage_configs import SivasAssemblyData, RuleDesignerDatabaseConfig, MigrationStatus, TeilestammMetadata
|
||||
|
||||
import argparse
|
||||
import os
|
||||
@@ -13,7 +13,14 @@ Dieses Programm kann:
|
||||
|
||||
class ExcelExport:
|
||||
|
||||
def __init__(self, asm_id, asm_json_dir, asm_json_filename, rd_dbase_dir, rd_dbase_filename, load_local_asm_json, load_local_rd_dbase):
|
||||
def __init__(self,
|
||||
asm_id,
|
||||
asm_json_dir,
|
||||
asm_json_filename,
|
||||
rd_dbase_dir,
|
||||
rd_dbase_filename,
|
||||
load_local_asm_json,
|
||||
load_local_rd_dbase):
|
||||
self.asm_id = asm_id
|
||||
self.asm_data = SivasAssemblyData(asm_json_dir, asm_json_filename, load_local_asm_json)
|
||||
self.rd_data = RuleDesignerDatabaseConfig(rd_dbase_dir, rd_dbase_filename, load_local_rd_dbase)
|
||||
@@ -142,17 +149,44 @@ class Treeview:
|
||||
}
|
||||
|
||||
|
||||
def __init__(self, asm_id, asm_json_dir, asm_json_filename, rd_dbase_dir, rd_dbase_filename, load_local_asm_json, load_local_rd_dbase):
|
||||
def __init__(self,
|
||||
asm_id,
|
||||
asm_json_dir,
|
||||
asm_json_filename,
|
||||
asm_csv_dir,
|
||||
asm_csv_filename,
|
||||
rd_dbase_dir,
|
||||
rd_dbase_filename,
|
||||
load_local_asm_json,
|
||||
load_local_asm_csv,
|
||||
load_local_rd_dbase):
|
||||
self.asm_id = asm_id
|
||||
self.asm_data = SivasAssemblyData(asm_json_dir, asm_json_filename, load_local_asm_json)
|
||||
self.asm_bom_data = SivasAssemblyData(asm_json_dir, asm_json_filename, load_local_asm_json)
|
||||
self.asm_metadata = TeilestammMetadata(asm_csv_dir, asm_csv_filename, load_local_asm_csv)
|
||||
self.rd_data = RuleDesignerDatabaseConfig(rd_dbase_dir, rd_dbase_filename, load_local_rd_dbase)
|
||||
self._migration_status = None
|
||||
self._longest_entry = None
|
||||
|
||||
@property
|
||||
def migration_status(self):
|
||||
if self._migration_status is None:
|
||||
self._migration_status = MigrationStatus(self.asm_data.child_ids, self.rd_data.ids)
|
||||
self._migration_status = MigrationStatus(self.asm_bom_data.child_ids, self.rd_data.ids)
|
||||
return self._migration_status
|
||||
|
||||
@property
|
||||
def longest_entry(self):
|
||||
|
||||
# Längster Eintrag wird zur Bestimmung der Leerraum-Breite zwischen Teilenummer und Bezeichnung im Baum benötigt
|
||||
# Es hätte für die Berechnung sowohl ein anderer Farbcode, als auch ein anderes Verbindersymbol angegeben werden können,
|
||||
# da die Anderen gleich lang wie die Angegebenen sind
|
||||
|
||||
if self._longest_entry is None:
|
||||
self._longest_entry = self.asm_bom_data.max_bom_depth * len(Treeview.prefix_types["PIPE"]) \
|
||||
+ len(self.asm_bom_data.longest_child_id) \
|
||||
+ len(Treeview.connector_symbols["T"]) \
|
||||
+ len(Treeview.console_colors["RESET"]) \
|
||||
+ len(Treeview.console_colors["RED"])
|
||||
return self._longest_entry
|
||||
|
||||
def generate_tree(self):
|
||||
self._tree_header()
|
||||
@@ -163,8 +197,13 @@ class Treeview:
|
||||
|
||||
"""Prints root number (number for which the user wants to see the tree) to the console"""
|
||||
|
||||
background_color = self._set_text_background_color(self.asm_id)
|
||||
print(f"{background_color}{self.asm_id}{Treeview.console_colors['RESET']}")
|
||||
id = self.asm_id
|
||||
color = self._set_text_background_color(id)
|
||||
|
||||
text_before_description = f"{color}{id}{Treeview.console_colors['RESET']}".ljust(self.longest_entry)
|
||||
description = self.asm_metadata.get_property_values("Bezeichnung1")
|
||||
|
||||
print(f"{text_before_description} {description}")
|
||||
|
||||
def _tree_body(self, parent_id=None, prefix=""):
|
||||
|
||||
@@ -173,7 +212,7 @@ class Treeview:
|
||||
if parent_id is None:
|
||||
parent_id = self.asm_id
|
||||
|
||||
parent_children = self.asm_data.parent_children
|
||||
parent_children = self.asm_bom_data.parent_children
|
||||
children_ids = parent_children[parent_id]
|
||||
|
||||
for index, child_id in enumerate(children_ids):
|
||||
@@ -194,7 +233,7 @@ class Treeview:
|
||||
amount_migrated_ids = len(self.migration_status.green_ids)
|
||||
amount_unmigrated_ids = len(self.migration_status.red_ids)
|
||||
|
||||
progress = int(amount_migrated_ids / len(self.asm_data.child_ids) * 100)
|
||||
progress = int(amount_migrated_ids / len(self.asm_bom_data.child_ids) * 100)
|
||||
|
||||
column_width = 5
|
||||
border_padding = "".ljust(column_width, "─")
|
||||
@@ -215,15 +254,9 @@ class Treeview:
|
||||
|
||||
"""Prints tree entry"""
|
||||
|
||||
# Necessary for calculating the padding-width after the partnumber
|
||||
longest_entry = self.asm_data.max_bom_depth * len(Treeview.prefix_types["PIPE"]) \
|
||||
+ len(connector) \
|
||||
+ len(self.asm_data.longest_child_id) \
|
||||
+ len(Treeview.console_colors["RESET"]) \
|
||||
+ len(Treeview.console_colors["RED"]) # other color codes (ansi escape sequences) could have been used instead since they all have the same length
|
||||
|
||||
text_before_description = f"{prefix}{connector}{color}{child_id}{Treeview.console_colors['RESET']}".ljust(longest_entry)
|
||||
description = self.asm_data.get_bom_property_values("Bezeichnung")[child_id]
|
||||
text_before_description = f"{prefix}{connector}{color}{child_id}{Treeview.console_colors['RESET']}".ljust(self.longest_entry)
|
||||
description = self.asm_bom_data.get_bom_property_values("Bezeichnung")[child_id]
|
||||
|
||||
print(f"{text_before_description} {description}")
|
||||
|
||||
@@ -266,20 +299,39 @@ if __name__ == '__main__':
|
||||
parser.add_argument('-e', '--excel', action='store_true', help='Exportiert Baugruppenstruktur als Excel-Datei mit farbiger Hervorhebung der Stücklistenpositionen, in Abhängigkeit vom Migrationsstatus')
|
||||
parser.add_argument('-rddir', '--rd_dbase_dir',required=False, action='store', default=os.environ.get("CREMIG_DATA"), help='Legt das Verzeichnis fest, in dem die CSV-Datei liegt, in der die RuleDesigner-Teilenummern aufgelistet sind. Default: Umgebungsvariable %CREMIG_DATA%')
|
||||
parser.add_argument('-rdfn', '--rd_dbase_filename', required=False, action='store', default=os.environ.get("RD_DATABASE_NAME"), help='Name der CSV-Datei, in der die RuleDesigner-Teilenummern aufgelistet sind. Default: Umgebungsvariable %RD_DATABASE_NAME%')
|
||||
parser.add_argument('-asmdir', '--asm_json_dir', required=False, action='store', default=os.environ.get("CREMIG_DATA"), help='Legt das Verzeichnis fest, JSON-Datei mit den Baugruppeninformationen liegen soll. Default: Umgebungsvariable %CREMIG_DATA%', metavar='filename')
|
||||
parser.add_argument('-ljson', '--local_asm_json', required=False, action='store_true', default=False, help='Legt fest, ob die JSON der Baugruppe bei jedem Programmlauf neu geladen wird, oder ob die lokale Datei eingelesen werden soll. Default: Neu laden bei jedem Programmlauf')
|
||||
parser.add_argument('-lcsv', '--local_rd_csv', required=False, action='store_true', default=False, help='Legt fest, ob die CSV, die die RuleDesigner-Teilenummern enthält (RD-Teilenummer.csv) bei jedem Programmlauf vom Server in das lokale Verzeichnis kopiert werden soll. Default: Kopieren bei jedem Programmlauf')
|
||||
parser.add_argument('-asmjdir', '--asm_json_dir', required=False, action='store', default=os.environ.get("CREMIG_DATA"), help='Legt das Verzeichnis fest, in dem die JSON-Datei mit den Baugruppeninformationen liegt. Default: Umgebungsvariable %CREMIG_DATA%', metavar='directory')
|
||||
parser.add_argument('-asmcdir', '--asm_csv_dir', required=False, action='store', default=os.environ.get("CREMIG_DATA"), help='Legt das Verzeichnis fest, in dem die CSV-Datei mit den Teilestamm-Metadaten der Baugruppennummer liegt. Default: Umgebungsvariable %CREMIG_DATA%', metavar='directory')
|
||||
parser.add_argument('-lasmjson', '--local_asm_json', required=False, action='store_true', default=False, help='Legt fest, ob die JSON der Baugruppe bei jedem Programmlauf neu geladen wird, oder ob die lokale Datei eingelesen werden soll. Default: Neu laden bei jedem Programmlauf')
|
||||
parser.add_argument('-lasmcsv', '--local_asm_csv', required=False, action='store_true', default=False, help='Legt fest, ob die Metadaten-CSV der Baugruppennummer bei jedem Programmlauf neu geladen wird. Default: Neu laden bei jedem Programmlauf')
|
||||
parser.add_argument('-lrdcsv', '--local_rd_csv', required=False, action='store_true', default=False, help='Legt fest, ob die CSV, die die RuleDesigner-Teilenummern enthält (RD-Teilenummer.csv) bei jedem Programmlauf vom Server in das lokale Verzeichnis kopiert werden soll. Default: Kopieren bei jedem Programmlauf')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
asm_id = args.sivasid.lstrip()
|
||||
asm_json_filename = f'{asm_id}.json'
|
||||
asm_bom_filename = f'{asm_id}.json'
|
||||
asm_metadata_filename = f'{asm_id}.csv'
|
||||
|
||||
if args.excel:
|
||||
excel_comparison = ExcelExport(asm_id, args.asm_json_dir, asm_json_filename, args.rd_dbase_dir, args.rd_dbase_filename, args.local_asm_json, args.local_rd_csv)
|
||||
excel_comparison = ExcelExport(asm_id=asm_id,
|
||||
asm_json_dir=args.asm_json_dir,
|
||||
asm_json_filename=asm_bom_filename,
|
||||
rd_dbase_dir=args.rd_dbase_dir,
|
||||
rd_dbase_filename=args.rd_dbase_filename,
|
||||
load_local_asm_json=args.local_asm_json,
|
||||
load_local_rd_dbase=args.local_rd_csv)
|
||||
excel_comparison.write_excel()
|
||||
elif args.tree:
|
||||
treeview_comparison = Treeview(asm_id, args.asm_json_dir, asm_json_filename, args.rd_dbase_dir, args.rd_dbase_filename, args.local_asm_json, args.local_rd_csv)
|
||||
treeview_comparison = Treeview(asm_id=asm_id,
|
||||
asm_json_dir=args.asm_json_dir,
|
||||
asm_json_filename=asm_bom_filename,
|
||||
asm_csv_dir=args.asm_csv_dir,
|
||||
asm_csv_filename=asm_metadata_filename,
|
||||
rd_dbase_dir=args.rd_dbase_dir,
|
||||
rd_dbase_filename=args.rd_dbase_filename,
|
||||
load_local_asm_json=args.local_asm_json,
|
||||
load_local_asm_csv=args.local_asm_csv,
|
||||
load_local_rd_dbase=args.local_rd_csv)
|
||||
|
||||
treeview_comparison.generate_tree()
|
||||
else:
|
||||
parser.print_help()
|
||||
Reference in New Issue
Block a user