diff --git a/CMDB2CSV_Aufbaumaster.py b/CMDB2CSV_Aufbaumaster.py index ba57207a..12ef4d2f 100755 --- a/CMDB2CSV_Aufbaumaster.py +++ b/CMDB2CSV_Aufbaumaster.py @@ -5,7 +5,7 @@ from pathlib import Path import pandas as pd from icecream import ic import re -import numpy as np +#import numpy as np class MainUI(QDialog): # erbt von QDialog @@ -17,7 +17,12 @@ class MainUI(QDialog): # erbt von QDialog self.path = None self.df_vte = None self.df_cmdb = None - self.dfb = None + self.df_vte_gg = None + self.df_vte_erw = None + self.df_cmdb_gg = None + self.df_cmdb_erw = None + self.dfb_gg = None + self.dfb_erw = None self.openBtn.clicked.connect(self.open_file_dialog) self.saveBtn.clicked.connect(self.save_file_dialog) self.filter = "Hostnamen" @@ -46,70 +51,78 @@ class MainUI(QDialog): # erbt von QDialog pass def collect_grundgeraete(self): - # Einlesen der Sheets + # Einlesen der Sheets allgemein self.df_vte = pd.read_excel(self.filename, header=7, na_filter=False, sheet_name='VTE-Input', usecols=['Hostname', 'Gruppierung', 'CONFIG-ID', 'CMDB Status'], engine='pyxlsb') self.df_cmdb = pd.read_excel(self.filename, header=2, sheet_name="CMDB", engine='pyxlsb') - # Nach relevanten Spalten filtern - self.df_vte = self.df_vte[self.df_vte['Gruppierung'] == 'Grundgerät'] + # Nach relevanten Spalten filtern Grundgeraete + # Sheet VTE + self.df_vte_gg = self.df_vte[self.df_vte['Gruppierung'] == 'Grundgerät'] + # Sheet CMDB + self.df_cmdb_gg = self.df_cmdb[self.df_cmdb['Filter'] == 'Grundgerät'] - self.df_cmdb = self.df_cmdb[self.df_cmdb['Filter'] == 'Grundgerät'] + # Nach relevanten Spalten filtern Erweiterung + self.df_vte_erw = self.df_vte[self.df_vte['Gruppierung'] == 'Erweiterung'] - self.df_cmdb = self.df_cmdb.drop( + self.df_cmdb_erw = self.df_cmdb[self.df_cmdb['Filter'] == 'Erweiterung'] + + # Teil Grundgeräte + self.df_cmdb_gg = self.df_cmdb_gg.drop( columns=['WV-Start', 'WV-Ende', 'CMDB-Status', 'Aufgabe Schritt', 'Filter', 'Waermeabgabe [BTU/h]', 'kalk. Strom [A]']) # Einfügen von Spalten in die CMDB-Tabelle - self.dfb = self.df_vte.merge(self.df_cmdb, on=['Hostname'], how='left') + self.dfb_gg = self.df_vte_gg.merge(self.df_cmdb_gg, on=['Hostname'], how='left') # Spalte für Mandanten Kontaktzuweisung - self.dfb.insert(loc=7, column='Mandanten Kontaktzuweisung', value='Mandant') + self.dfb_gg.insert(loc=7, column='Mandanten Kontaktzuweisung', value='Mandant') # Spalte für Segmente - self.dfb.insert(loc=8, column='Segment', value='') + self.dfb_gg.insert(loc=8, column='Segment', value='') # Spalte für Domains - self.dfb.insert(loc=9, column='Domain', value='') + self.dfb_gg.insert(loc=9, column='Domain', value='') # Spalte einfügen für HE - self.dfb.insert(loc=14, column='HE', value='') + self.dfb_gg.insert(loc=14, column='HE', value='') # Einschub - self.dfb.insert(loc=15, column='Einschub', value='') + self.dfb_gg.insert(loc=15, column='Einschub', value='') # Montage --> nur horizontal - self.dfb.insert(loc=16, column='Montage', value='horizontal') + self.dfb_gg.insert(loc=16, column='Montage', value='horizontal') # Formfaktor - self.dfb.insert(loc=17, column='Formfaktor', value='19"') + self.dfb_gg.insert(loc=17, column='Formfaktor', value='19"') # Masseinheit - self.dfb.insert(loc=18, column='Masseinheit', value='Zoll') + self.dfb_gg.insert(loc=18, column='Masseinheit', value='Zoll') # Spaltenanmen mit Sonderzeichen anzeigen - columns_with_special_chars = [col for col in self.dfb.columns if self.has_special_characters(col)] + columns_with_special_chars = [col for col in self.dfb_gg.columns if self.has_special_characters(col)] print("Spaltenheader mit Sonderzeichen:", columns_with_special_chars) # Führende Leerzeichen in allen Spalten entfernen - self.dfb = self.dfb.apply(lambda x: x.str.lstrip() if x.dtype == "object" else x) + self.dfb_gg = self.dfb_gg.apply(lambda x: x.str.lstrip() if x.dtype == "object" else x) # Alle Floats in Strings umwandeln - self.dfb = self.dfb.applymap(lambda x: str(x) if isinstance(x, float) else x) + self.dfb_gg = self.dfb_gg.applymap(lambda x: str(x) if isinstance(x, float) else x) - self.dfb = self.dfb.apply(self.suche_Einschub, axis=1) + self.dfb_gg = self.dfb_gg.apply(self.suche_Einschub, axis=1) - self.dfb = self.dfb.apply(self.montageort, axis=1) + self.dfb_gg = self.dfb_gg.apply(self.montageort, axis=1) - self.dfb = self.dfb.apply(self.prüfe_und_setze_wert, axis=1) + self.dfb_gg = self.dfb_gg.apply(self.pruefe_und_setze_wert, axis=1) # Setzen von int für HE und Anz. HE - self.dfb['HE'] = self.dfb['HE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) - self.dfb['belegte\nHE'] = self.dfb['belegte\nHE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) + self.dfb_gg['HE'] = self.dfb_gg['HE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) + + # self.dfb['belegte\nHE'] = self.dfb['belegte\nHE'].apply(lambda x: x if pd.isnull(x) else str(int(x))) ############################################################################################## @@ -128,7 +141,7 @@ class MainUI(QDialog): # erbt von QDialog def montageort(self, montage): # Fehlerbereinigung - ic(montage) + ic("Montage: ", montage) if montage['ID\nStandort']not in ("Ber-PS", "Bon-BTW"): print("Kein Standort P40 oder BTW") sys.exit(0) @@ -154,7 +167,7 @@ class MainUI(QDialog): # erbt von QDialog - def prüfe_und_setze_wert(self, zeile): + def pruefe_und_setze_wert(self, zeile): #ic(zeile) ################################################################ if zeile['Hostname'][4:6] == "10": @@ -373,14 +386,14 @@ class MainUI(QDialog): # erbt von QDialog return zeile def save_file_dialog(self): - ic(self.dfb) + ic(self.dfb_gg) options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog self.savefilename, _ = QFileDialog.getSaveFileName(self, "Save File", "", "CSV(*.csv);;CSV Files(*.csv)", options=options) - self.dfb.to_csv(self.savefilename, index=None, header=True, encoding='utf-8') + self.dfb_gg.to_csv(self.savefilename, index=None, header=True, encoding='utf-8') print("Datei wurde gespeichert:", self.savefilename)