Files
sivasPrices/lib/update_prices.py
T

91 lines
3.6 KiB
Python

import argparse
import os
import pandas as pd
"""
Dieses Programm kann:
- eine Excel-Datei exportieren, in der alle aktualisierten Preise der Excel Datei aus dme work Ordner enthalten sind
"""
class Fetch:
datafile = 'grid_export.xlsx'
lib_dir = os.environ.get('SIVASPRICES_LIB')
data_dir = os.environ.get('SIVASPRICES_DATA')
in_dir = os.environ.get('SIVASPRICES_WORK')
out_dir = os.environ.get('SIVASPRICES_OUT')
sivas_prices_xls_path = os.path.join(data_dir, datafile)
def __init__(self):
self.read_grid_export()
def process(self, inputfile):
df_to_search_ids = self.read_inputfile(inputfile)
self.create_excel_export(df_to_search_ids)
def read_grid_export(self):
# liest die XLS-Datei ein, in der alle Preise des kompletten Teilestamms enthalten sind
# mit Teilenummer, Bezeichnung 1 und Laufende Materialkosten
try:
#self._sivas_df = pd.read_excel(self.sivas_prices_xls_path, usecols=["Teilenummer", "Bezeichnung1", "Laufende Materialkosten"])
self._sivas_df = pd.read_excel(self.sivas_prices_xls_path)
self._sivas_df['Teilenummer'] = self._sivas_df['Teilenummer'].astype(str)
except FileNotFoundError:
# XLSX-Datei wurde noch nicht ins %SIVASPRICES_WORK% kopiert
print(f"FAILED: '{Fetch.datafile}' nicht gefunden. sollte im '{Fetch.in_dir}' liegen ...")
def read_inputfile(self, inputfile):
# Methode liest die Sivas Ids der Eingabedatei, um festzustellen welche Preise gesucht werden.
try:
df = pd.read_excel(inputfile, sheet_name='Kaufteile', usecols=["Teilenummer"])
df['Teilenummer'] = df['Teilenummer'].astype(str)
return df
except FileNotFoundError:
print(f"FAILED: '{inputfile}' nicht gefunden. sollte im '{Fetch.data_dir}' liegen ...")
return pd.DataFrame()
except ValueError:
print(f"FAILED: Spalte 'Teilenummer' nicht gefunden")
return pd.DataFrame()
def create_excel_export(self, df_to_search_sivas_ids:pd.DataFrame, outfile):
# Spalten in Excel-Datei: Teilenummer, Bezeichnung, Preis
df_merged = self._sivas_df.merge(df_to_search_sivas_ids, how='inner', on='Teilenummer')
df_merged.set_index('Teilenummer')
df_merged.to_excel(outfile, index=False)
print(f"OK: Excel-Datei erfolgreich in '{Fetch.out_dir}' geschrieben...")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Das Programm holt die speziell gewünschten Preise aus der data/grid_export.xlsx ', prog='update_prices')
parser.add_argument('-a', '--all', action='store_true', help='Erzeugt Excel-Dateien für alle Teilenummern in allen .xlsx Files im Work Ordner')
parser.add_argument('-e', '--excel', action='store', help='Erzeugt Excel-Datei in der alle Teilenummern, die migriert werden müssen, aufgelistet sind')
args = parser.parse_args()
if args.excel:
fetch = Fetch()
fetch.process(args.excel)
elif args.all:
all_files = os.listdir(os.environ.get('SIVASPRICES_WORK'))
fetch = Fetch()
in_dir = os.environ.get('SIVASPRICES_WORK')
out_dir = os.environ.get('SIVASPRICES_OUT')
for myfile in all_files:
if not myfile.endswith(".xlsx"):
continue
input_xlsx = os.path.join(in_dir, myfile)
output_xlsx = os.path.join(out_dir, 'updated_'+myfile)
df_to_search_ids = fetch.read_inputfile(input_xlsx)
if df_to_search_ids.empty:
continue
fetch.create_excel_export(df_to_search_ids, output_xlsx)
else:
parser.print_help()