Compare commits

...

5 Commits

4 changed files with 99 additions and 6 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
@echo off
IF "%1" == "-s" (set SIVAS_ID=%2) else (set /p SIVAS_ID=Enter Sivas ID or IDs:)
CALL manage_interpreter.bat activate_interpreter
python %CREMIG_LIB%\get_sivas_teilestamm.py %*
python %CREMIG_LIB%\update_database.py --sivasid=%SIVAS_ID% -t
CALL manage_interpreter.bat deactivate_interpreter
+31
View File
@@ -0,0 +1,31 @@
import argparse
import os
from manage_configs import MigrationStatus
import update_database
class FetchSivasTeilestamm:
def __init__(self, assembly_json_name, assembly_json_out_dir=os.environ.get('CREMIG_DATA'), csv_out_dir=os.environ.get('CREMIG_DATA')):
self.migration = MigrationStatus(assembly_json_out_dir, str(assembly_json_name).replace('.json', "") + ".json")
self.csv_out_dir = csv_out_dir
def get_unmigrated_teilstamm_csvs(self):
"""Generiert CSV-Dateien für alle noch nicht migrierten Stücklistenteile der angegebenen Baugruppennummer"""
unmigrated_ids = self.migration.get_unmigrated_ids()
update_database.get_sivas_teilestamm(unmigrated_ids, self.csv_out_dir)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='fetches data from sivas or ruledesigner fusion', prog='update_database')
parser.add_argument('-s', '--sivasid', action='store', help='fetch teilestamm-data for all unmigrated parts in the bom of a given asm-id. Specifiy multiple ids as comma separated values without space, e.g. 200000089,200000090', metavar='id(s)')
args = parser.parse_args()
out_dir = os.environ.get('CREMIG_DATA')
if args.sivasid:
sivas_asm_id = args.sivasid.strip().replace(".json","")
update_database.get_rd_dbase()
sivas_teilestamm = FetchSivasTeilestamm(out_dir, sivas_asm_id)
sivas_teilestamm.get_unmigrated_teilstamm_csvs()
else:
parser.print_help()
+19 -1
View File
@@ -2,6 +2,8 @@ import os
import json
from configparser import ConfigParser
import pandas as pd
import update_database
"""
Diese Lib verwaltet alle Config dateien (als .cfg oder als .json) von CreoMigrate
@@ -133,11 +135,15 @@ class RuleDesignerDatabaseConfig(CSVBasedConfig):
class MigrationStatus:
def __init__(self, file_dir, assembly_json):
self.file_dir = file_dir
self.assembly_json = assembly_json.replace(".json", "")
self.sivas_assembly_data = SivasAssemblyData(file_dir, assembly_json)
self.ruledesigner_data = RuleDesignerDatabaseConfig(file_dir)
def get_migration_status(self):
def get_migration_status(self) -> dict:
"""Gibt zurück, ob die Teilenummern der Baugruppe bereits migriert wurden, oder nicht"""
update_database.get_sivas_dbase(sivas_id=self.assembly_json, out_dir=self.file_dir)
update_database.get_rd_dbase()
sivas_assembly_ids = self.sivas_assembly_data.get_assembly_ids()
ruledesigner_ids = self.ruledesigner_data.get_ruledesigner_ids()
@@ -146,6 +152,18 @@ class MigrationStatus:
migration_status[sivas_assembly_id] = True if sivas_assembly_id in ruledesigner_ids else False
return migration_status
def get_migrated_ids(self) -> list:
"""Gibt alle Teilenummern aus der Baugruppenstückliste zurück, die bereits in RuleDesigner migriert wurden"""
migrated_ids = [assembly_id for assembly_id, migration_status in self.get_migration_status().items() if migration_status is True]
return migrated_ids
def get_unmigrated_ids(self) -> list:
"""Gibt alle Teilenummern aus der Baugruppenstückliste zurück, deren Migration in RuleDesigner noch aussteht"""
unmigrated_ids = [assembly_id for assembly_id, migration_status in self.get_migration_status().items() if migration_status is False]
return unmigrated_ids
class TOSGroupsConfig(JsonBasedConfig):
"""Auslesen der Config Angaben zu den TOS Gruppen"""
+47 -4
View File
@@ -39,7 +39,7 @@ def get_blacklist(outdir):
fh.write('\n'.join(blacklist))
print("done")
def get_rd_dbase(out_dir):
def get_rd_dbase(out_dir=os.environ.get('CREMIG_DATA')):
rd_csv_source_dir = os.environ.get("RD_DATABASE_SOURCE")
rd_csv_filename = os.environ.get("RD_DATABASE_NAME")
@@ -59,9 +59,9 @@ def get_rd_dbase(out_dir):
print(f"File with ruldesigner-partnumbers ${csv_source_path} doesn't exist. Check VPN connection and %RD_DATABASE_SOURCE% + %RD_DATABASE_NAME% in cremig_setenv.bat")
sys.exit(0)
def get_sivas_dbase(sivas_id, out_dir):
sivas_exe_path = os.environ.get('SIVAS_DATABASE_QUERY')
sivas_id = sivas_id.replace(".json", "")
if os.path.isfile(sivas_exe_path):
@@ -81,12 +81,50 @@ def get_sivas_dbase(sivas_id, out_dir):
print(f"Can't execute SIVAS-database query. Check VPN connection and check the path of %SIVAS_DATABASE_QUERY% in cremig_setenv.bat")
sys.exit(0)
def get_sivas_teilestamm(sivas_ids, out_dir):
sivas_teilestamm_exe = os.environ.get('SIVAS_TEILESTAMM')
if isinstance(sivas_ids, str):
sivas_ids = list(set(sivas_ids.strip().split(",")))
ids_to_generate = []
for id in sivas_ids:
id = id.replace(" ", "")
out_file = os.path.join(out_dir, id + ".csv")
if not os.path.isfile(out_file):
ids_to_generate.append(id)
if not id.isnumeric():
print(f"Partnumber '{id}' contains invalid characters. Please check given partnumber. Multiple partnumbers have to be specified as comma separated values without space, e.g. 200000089,200000090")
if os.path.isfile(sivas_teilestamm_exe):
if os.path.isdir(out_dir):
if len(ids_to_generate) == 0:
print("CSV-file(s) already exist or given partnumber(s) are migrated.")
return
else:
print(f"Attempting to generate csv-file(s) for given partnumber(s)...")
ids_to_generate = ",".join(ids_to_generate)
os.environ["SIVAS_EXCEL_EXPORT_DIR"] = out_dir
subprocess.run(f"{sivas_teilestamm_exe} -teilenr={ids_to_generate} -open_target_dir=n")
else:
print(f"Output directory for .csv-file(s) ${out_dir} doesn't exist.")
else:
print(f"Can't execute SIVAS-database query. Check VPN connection or check the path of %SIVAS_DATABASE_QUERY% in cremig_setenv.bat")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='fetches data from sivas or ruledesigner fusion', prog='update_database')
parser.add_argument('-s', '--sivasid', action='store', help='fetch data of this id from sivas fo local database folder', metavar='id')
parser.add_argument('-r', '--rd', action='store_true', help='fetch list of existing parts from network drive')
parser.add_argument('-b', '--blacklist', action='store_true', help='fetch list of not allowed parts from network drive')
parser.add_argument('-t', '--teilestamm', action='store_true', help='fetch teilestamm-data for given partnumbers as csv')
args = parser.parse_args()
@@ -96,10 +134,15 @@ if __name__ == '__main__':
get_rd_dbase(out_dir)
elif args.sivasid:
get_sivas_dbase(args.sivasid, out_dir)
if args.teilestamm:
get_sivas_teilestamm(args.sivasid, out_dir)
else:
get_sivas_dbase(args.sivasid, out_dir)
elif args.blacklist:
get_blacklist(out_dir)
else:
parser.print_help()